Common Socket Errors হলো Socket Programming-এ বিভিন্ন ধরনের ত্রুটি, যা সংযোগ স্থাপন, ডেটা পাঠানো বা গ্রহণের সময় ঘটে। প্রতিটি ত্রুটি একটি নির্দিষ্ট পরিস্থিতিকে নির্দেশ করে এবং সেগুলোর সমাধান ভিন্ন হতে পারে। এখানে EADDRINUSE
, ECONNRESET
, এবং ETIMEDOUT
ত্রুটির কারণ এবং সমাধান নিয়ে বিস্তারিত আলোচনা করা হলো।
EADDRINUSE
(Address Already in Use)SO_REUSEADDR
অপশন ব্যবহার করে একই Address এবং Port পুনরায় ব্যবহার করার অনুমতি দিন। এটি বিশেষত সার্ভার প্রোগ্রামিংয়ে কার্যকর, যখন সার্ভারটি দ্রুত পুনরায় চালু করতে হয়।int opt = 1;
setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
নিশ্চিত করুন যে একই Port অন্য কোনো প্রক্রিয়া ব্যবহার করছে কিনা। প্রয়োজনে netstat
বা lsof
এর মতো কমান্ড ব্যবহার করে চেক করুন এবং বন্ধ করুন।
অন্য একটি Port ব্যবহার করুন, যাতে সংঘর্ষ এড়ানো যায়।
ECONNRESET
(Connection Reset by Peer)select()
বা poll()
ফাংশনের মাধ্যমে করা যায়।ECONNRESET
ত্রুটি হ্যান্ডেল করার জন্য উপযুক্ত রিকভারী মেকানিজম ব্যবহার করুন, যেমন: পুনরায় সংযোগের চেষ্টা বা ব্যাকআপ সার্ভার ব্যবহার করা।ETIMEDOUT
(Connection Timed Out)struct timeval timeout;
timeout.tv_sec = 5; // 5 সেকেন্ডের জন্য টাইমআউট সেট করা
timeout.tv_usec = 0;
setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, (const char*)&timeout, sizeof(timeout));
ত্রুটি | কারণ | সমাধান |
---|---|---|
EADDRINUSE | Port-এ Address ইতোমধ্যে ব্যবহৃত | SO_REUSEADDR ব্যবহার করে পুনরায় ব্যবহার করার অনুমতি দিন, অথবা অন্য Port ব্যবহার করুন। |
ECONNRESET | সংযোগের অন্য প্রান্ত হঠাৎ সংযোগ বন্ধ করেছে | সংযোগের অবস্থা যাচাই করুন এবং পুনরায় সংযোগের চেষ্টা করুন। লোগিং এবং ডায়াগনস্টিক তথ্য সংগ্রহ করুন। |
ETIMEDOUT | সংযোগে সময়মতো সাড়া পাওয়া যায়নি | ক্লায়েন্ট ও সার্ভারের নেটওয়ার্ক কানেকশন এবং কনফিগারেশন যাচাই করুন। টাইমআউট সেট করুন এবং পুনরায় চেষ্টা করুন। |
common.read_more