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_INETIPv4 এর জন্য,AF_INET6IPv6 এর জন্য)। - type: Socket এর ধরন নির্দেশ করে (যেমন
SOCK_STREAMTCP এর জন্য,SOCK_DGRAMUDP এর জন্য)। - 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-এর কাজের ধাপ:
- সার্ভার:
socket()→bind()→listen()→accept()→recv()/send()→close()
- ক্লায়েন্ট:
socket()→connect()→send()/recv()→close()
Content added By
Read more