Socket System Calls: socket(), bind(), listen(), accept(), connect(), send(), recv(), close()

Computer Programming - ইউনিক্স সকেট (Unix Socket) Socket API এবং এর ব্যবহার (Socket API and Its Usage) |
293
293

Socket Programming-এ Socket System Calls হলো মূল ফাংশন বা মেথড, যা ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ স্থাপন, ডেটা আদান-প্রদান, এবং সংযোগ বন্ধ করতে ব্যবহৃত হয়। নিচে প্রতিটি System Call-এর বিস্তারিত ব্যাখ্যা এবং তাদের ব্যবহার উল্লেখ করা হলো:

১. socket()

কাজ:

  • socket() System Call একটি নতুন Socket তৈরি করে, যা ক্লায়েন্ট বা সার্ভারের মাধ্যমে নেটওয়ার্ক যোগাযোগের জন্য ব্যবহৃত হয়। এটি IP Address Family, Socket Type, এবং প্রোটোকল নির্ধারণ করে।

সিনট্যাক্স:

int socket(int domain, int type, int protocol);
  • domain: Address family নির্দেশ করে (যেমন AF_INET IPv4 এর জন্য, AF_INET6 IPv6 এর জন্য)।
  • type: Socket এর ধরন নির্দেশ করে (যেমন SOCK_STREAM TCP এর জন্য, SOCK_DGRAM UDP এর জন্য)।
  • protocol: সাধারণত 0 রাখা হয়, যা ডিফল্ট প্রোটোকল নির্ধারণ করে।

উদাহরণ:

 

int sockfd = socket(AF_INET, SOCK_STREAM, 0);

২. bind()

কাজ:

  • bind() System Call একটি Socket-কে নির্দিষ্ট IP Address এবং Port Number-এর সাথে সংযুক্ত করে। এটি সাধারণত সার্ভারের ক্ষেত্রে ব্যবহৃত হয়।

সিনট্যাক্স:

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • sockfd: Socket file descriptor, যা socket() System Call থেকে ফেরত আসে।
  • addr: একটি স্ট্রাকচার, যা Socket-এর IP Address এবং Port Number ধারণ করে।
  • addrlen: addr স্ট্রাকচারের আকার নির্দেশ করে।

উদাহরণ:

struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = INADDR_ANY;

bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));

৩. listen()

কাজ:

  • listen() System Call সার্ভার Socket-কে ইনকামিং সংযোগের জন্য প্রস্তুত করে। এটি এক বা একাধিক ক্লায়েন্ট সংযোগ গ্রহণের জন্য সার্ভারকে অপেক্ষমাণ অবস্থায় রাখে।

সিনট্যাক্স:

int listen(int sockfd, int backlog);
  • sockfd: Socket file descriptor, যা bind() System Call থেকে সংযুক্ত করা হয়েছে।
  • backlog: সর্বোচ্চ কতটি কানেকশন একসঙ্গে অপেক্ষায় থাকতে পারবে, তা নির্দেশ করে।

উদাহরণ:

listen(sockfd, 5);

৪. accept()

কাজ:

  • accept() System Call ইনকামিং সংযোগ গ্রহণ করে এবং ক্লায়েন্টের সাথে একটি নতুন Socket তৈরি করে, যা ডেটা ট্রান্সফার করার জন্য ব্যবহৃত হয়।

সিনট্যাক্স:

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

sockfd: Socket file descriptor, যা ইনকামিং সংযোগের জন্য অপেক্ষা করছে।
  • addr: ক্লায়েন্টের IP Address এবং Port সংরক্ষণের জন্য একটি স্ট্রাকচার।
  • addrlen: ক্লায়েন্টের অ্যাড্রেস স্ট্রাকচারের আকার নির্দেশ করে।

উদাহরণ:

struct sockaddr_in client_addr;
socklen_t addr_size = sizeof(client_addr);
int new_sockfd = accept(sockfd, (struct sockaddr*)&client_addr, &addr_size);

৫. connect()

কাজ:

  • connect() System Call ক্লায়েন্ট Socket-কে সার্ভারের সাথে সংযোগ স্থাপন করতে ব্যবহৃত হয়। এটি সার্ভারের IP Address এবং Port Number ব্যবহার করে সংযোগ স্থাপন করে।

সিনট্যাক্স:

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  • sockfd: ক্লায়েন্ট Socket file descriptor।
  • addr: সার্ভারের ঠিকানা সংরক্ষিত স্ট্রাকচার।
  • addrlen: ঠিকানা স্ট্রাকচারের আকার নির্দেশ করে।

উদাহরণ:

struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");

connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));

৬. send()

কাজ:

  • send() System Call ডেটা পাঠানোর জন্য ব্যবহৃত হয়। এটি TCP সংযোগে ডেটা ট্রান্সমিট করার জন্য Socket ব্যবহার করে।

সিনট্যাক্স:

ssize_t send(int sockfd, const void *buf, size_t len, int flags);
  • sockfd: সংযোগ স্থাপিত Socket file descriptor।
  • buf: ডেটা সংরক্ষণকারী বাফার পয়েন্টার।
  • len: ডেটার দৈর্ঘ্য।
  • flags: অতিরিক্ত ফ্ল্যাগ (সাধারণত 0)।

উদাহরণ:

char *message = "Hello, Server!";
send(sockfd, message, strlen(message), 0);

৭. recv()

কাজ:

  • recv() System Call ডেটা গ্রহণের জন্য ব্যবহৃত হয়। এটি TCP সংযোগে ইনকামিং ডেটা প্যাকেট গ্রহণ করতে Socket ব্যবহার করে।

সিনট্যাক্স:

ssize_t recv(int sockfd, void *buf, size_t len, int flags);
  • sockfd: সংযোগ স্থাপিত Socket file descriptor।
  • buf: ডেটা গ্রহণের জন্য বাফার পয়েন্টার।
  • len: বাফারের দৈর্ঘ্য।
  • flags: অতিরিক্ত ফ্ল্যাগ (সাধারণত 0)।

উদাহরণ:

char buffer[1024];
recv(sockfd, buffer, sizeof(buffer), 0);

৮. close()

কাজ:

  • close() System Call একটি Socket বন্ধ করতে ব্যবহৃত হয়। এটি সংযোগ বন্ধ করার এবং Socket রিসোর্স মুক্ত করার জন্য ব্যবহার করা হয়।

সিনট্যাক্স:

int close(int sockfd);
  • sockfd: বন্ধ করতে চাওয়া Socket file descriptor।

উদাহরণ:

close(sockfd);

সংক্ষেপে Socket System Calls-এর কাজের ধাপ:

  1. সার্ভার:
    • socket()bind()listen()accept()recv()/send()close()
  2. ক্লায়েন্ট:
    • socket()connect()send()/recv()close()
Content added By
Promotion