ক্রিয়াকলাপ গ্রহণের সময়সীমা নির্ধারণ করতে আপনি সেটসোক্ট ফাংশনটি ব্যবহার করতে পারেন :
SO_RCVTIMEO
টাইমআউট মান সেট করে যা কোনও ইনপুট ফাংশনটি শেষ না হওয়া পর্যন্ত অপেক্ষা করা সর্বাধিক পরিমাণ নির্দিষ্ট করে। এটি ইনপুট ক্রিয়াকলাপটি শেষ হওয়ার জন্য কতক্ষণ অপেক্ষা করতে হবে তার সীমা নির্দিষ্ট করে সেকেন্ডের সংখ্যা এবং মাইক্রোসেকেন্ড সহ একটি সময়সীমা কাঠামো গ্রহণ করে। অতিরিক্ত তথ্য না পেয়ে যদি কোনও রিসিভ অপারেশন এই সময়ের জন্য অবরুদ্ধ করে থাকে, তবে কোনও তথ্য না পেলে এটি একটি আংশিক গণনা বা ভুল দ্বারা [EAGAIN] বা [EWOULDBLOCK] এ সেট হবে। এই বিকল্পের জন্য ডিফল্ট শূন্য, যা নির্দেশ করে যে কোনও প্রাপ্তির ক্রিয়াকলাপ শেষ হবে না। এই বিকল্পের একটি সময়কাল কাঠামো লাগে। নোট করুন যে সমস্ত বাস্তবায়ন এই বিকল্পটি সেট করার অনুমতি দেয় না।
// LINUX
struct timeval tv;
tv.tv_sec = timeout_in_seconds;
tv.tv_usec = 0;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof tv);
// WINDOWS
DWORD timeout = timeout_in_seconds * 1000;
setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof timeout);
// MAC OS X (identical to Linux)
struct timeval tv;
tv.tv_sec = timeout_in_seconds;
tv.tv_usec = 0;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&tv, sizeof tv);
রিপোর্টে উইন্ডোজ এ কল করার আগে করা উচিত bind
। আমি পরীক্ষার মাধ্যমে যাচাই করেছি যে এটি bind
লিনাক্স এবং ওএস এক্স এর আগে বা পরে করা যেতে পারে ।