ডেটা পুনঃপ্রতিষ্ঠান এবং WSAECONNABORTED (10053) সকেট ত্রুটি


4

বলুন আমার দুটি সকেট রয়েছে যা একে অপরের সাথে সংযুক্ত ( Socket A এবং Socket B )।

কম্পিউটার আছে যে Socket B ক্ষমতা থেকে unplugged হয়, তারপর যদি Socket A কিছু তথ্য পাঠাতে চেষ্টা করে Socket Bতথ্যটি স্বীকার করা হবে না এবং তাই, টিসিপি যতক্ষণ না TCP ছেড়ে দেয় এবং তথ্যটি আবার সরিয়ে না দেওয়ার সিদ্ধান্ত নেয়, ততক্ষণ টিসিপি তথ্যটি পুনরায় স্বীকার করবে Socket A যে সকেট ত্রুটি WSAECONNABORTED (10053) কিছু ঘটেছিল.

আমার প্রশ্নগুলি হল:

  • এটা সবসময় আমি সকেট ত্রুটি পাবেন নিশ্চিত WSAECONNABORTED (10053) কিছু retransmission retries পরে (আমি এটা বিশ্বাস, কারণ অন্যথায় টিসিপি চিরতরে চিরতরে ফেরত অবিরত হবে!)?
  • TCP কে ছেড়ে দেওয়ার এবং কারণগুলি নির্ধারণ করার জন্য এটি কতগুলি পুনর্নবীকরণ পুনরাবৃত্তি করে WSAECONNABORTED (10053) সকেট ত্রুটি?
  • Retransmission এই নম্বর কনফিগারযোগ্য retries?

উত্তর:


1

টিসিপি জন্য উইন্ডোজ টাইমার বলা সময় একক ব্যবহার retransmission সময়সীমা (RTO) আনুমানিক উপর ভিত্তি করে রাউন্ড ট্রিপ সময় (বা RTT) প্রেরক এবং রিসিভারের মধ্যে, পাশাপাশি এই বৃত্তাকার ট্রিপের সময়ের মধ্যে বৈচিত্র। এই টাইমার আচরণ উল্লেখ করা হয় RFC 6298 । আরো তথ্যের জন্য উইকিপিডিয়া নিবন্ধ দেখুন ট্রান্সমিশন কন্ট্রোল প্রোটোকল

এটি উইন্ডোজ কাজ করে উপায় নিম্নরূপ:

  1. একটি আনুমানিক RTO প্রথম প্রতিষ্ঠিত হয়
  2. টিসিপি বার্তা পাঠানো হয় এবং আমরা একটি ACK (স্বীকারোক্তি) প্যাকেটের জন্য অপেক্ষা করি
  3. যদি এসিকে পৌঁছে না, আমরা অপেক্ষা সময় দ্বিগুণ করে ধাপ 2 এ ফিরে যাই
  4. যদি এসিকে গ্রহণ করা হয়, একটি নতুন RTO গণনা করা হয়
  5. যদি একটি ACK কখনও গ্রহণ না হয়, সংযোগ WSAECONNABORTED ত্রুটি সহ বাতিল করা হয়।

এই মাইক্রোসফ্ট নিবন্ধে বর্ণিত এই প্রোটোকলের জন্য উইন্ডোজ দুটি রেজিস্ট্রি পরামিতি ব্যবহার করে
কিভাবে টিসিপি / আইপি সর্বাধিক পুনর্নবীকরণ সময় আউট পরিবর্তন করতে

TcpMaxDataRetransmissions

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters

Value Name:  TcpMaxDataRetransmissions
Data Type:   REG_DWORD - Number
Valid Range: 0 - 0xFFFFFFFF
Default:     5

বর্ণনা:

এই প্যারামিটারটি টিসিপিটির পুনরাবৃত্তি সংখ্যা কতবার সংহত করে   বিচ্ছিন্ন করার আগে পৃথক তথ্য বিভাগ (অ সংযোগ সংযোগ)   সংযোগ নেই। পুনরাবৃত্তি সময় আউট প্রতিটি সঙ্গে দ্বিগুণ হয়   একটি সংযোগ ক্রমাগত retransmission। প্রতিক্রিয়া যখন এটি রিসেট করা হয়   জীবনবৃত্তান্ত. বেস সময় আউট মান গতিশীলভাবে দ্বারা নির্ধারিত হয়   সংযোগ উপর রাউন্ড ট্রিপ সময় পরিমাপ।

TCPInitialRtt

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\ID for Adapter

Value Name:  TCPInitialRtt
Data Type:   REG_DWORD
Valid Range: 300-65535 (milliseconds in decimal)
Default:     0xBB8 (3000 milliseconds expressed in hexadecimal)

বর্ণনা:

এই পরামিতি প্রাথমিক retransmission সময় আউট যে নিয়ন্ত্রণ করে   প্রতিটি নতুন সংযোগে টিসিপি দ্বারা ব্যবহৃত। এটা সংযোগ প্রযোজ্য   অনুরোধ (সিইএন) এবং প্রতিটি ডাটা সেগমেন্টে পাঠানো হয়   সংযোগ নেই। উদাহরণস্বরূপ, "5000 দশমিক" এর মান ডেটা সেট করে   পাঁচ সেকেন্ডের মধ্যে প্রাথমিক retransmit সময়।

দ্রষ্টব্য: আপনি প্রাথমিক সময়-আউটের জন্য মানটি বাড়িয়ে তুলতে পারেন।   মান হ্রাস সমর্থিত নয়।

যদিও TCPInitialRtt এর প্রাথমিক সময়সীমার সাথে শুরু হয় 3 সেকেন্ড, এটি আরও একটি smoothed আউট হবে প্যাকেট সঠিকভাবে প্রেরণ করা হয় যখন যুক্তিসঙ্গত মান।

এই কাজ কিভাবে উদাহরণস্বরূপ, যদি আমরা ডিফল্ট মান 3 সেকেন্ডের RTO এবং 5 টি রিট্রি নিতে পারি, মোট অপেক্ষা সময় হবে:

  1. প্রথম সময়সীমার সময়: 3 সেকেন্ড
  2. দ্বিতীয় সময়সীমা: 6 সেকেন্ড
  3. তৃতীয় সময়সীমা: 12 সেকেন্ড
  4. চতুর্থ সময়সীমা: 24 সেকেন্ড
  5. পঞ্চম এবং শেষ সময়সীমা: 48 সেকেন্ড

সংযোগটি বাতিল হওয়ার আগে 93 সেকেন্ডের মোট ওয়েট-টাইম দেয়। বেশিরভাগ ক্ষেত্রে, সংযোগটি সঠিকভাবে কাজ করে থাকলে, সময়সীমা অনেক কম হবে।


0

সাধারণত সময় ব্যবহৃত হয় ( একটি সময়সীমার মান পৌঁছানো না হওয়া পর্যন্ত পুনরায় চেষ্টা চালিয়ে যান ), তবে এটি কিভাবে ক্লায়েন্ট / সার্ভার সফ্টওয়্যার লিখিত হয়েছে তার উপর নির্ভর করে।

যদি সময় ব্যবহার করা হয়, তাহলে পুনরাবৃত্তি সংখ্যা জানার জন্য আপনাকে জানতে হবে কত ঘনঘন retries ঘটবে।

প্রোগ্রাম Winsock ব্যবহার করা হয় যদি একটি সময়সীমা সেট করার সম্ভাব্য উপায় জন্য নীচের দেখুন।

সফ্টওয়্যার ব্যবহার করার জন্য লেখা যেতে পারে retries সংখ্যা ব্যর্থ বা আগে সময় ব্যর্থ বা উভয় একটি সমন্বয় আগে।


সূত্র Winsock প্রোগ্রামার এর FAQ

2.15 - উইনসক ফাংশনের জন্য আমি টাইমআউট কিভাবে পরিবর্তন করতে পারি?

ব্লকিং উইনসক ফাংশনগুলির কিছু (উদাঃ সংযোগ ()) একটি সময়সীমা আছে   তাদের মধ্যে এমবেডেড। এই পিছনে তত্ত্ব শুধুমাত্র স্ট্যাক আছে   একটি সঠিক সময়সীমা নির্ধারণ করতে প্রয়োজনীয় সব তথ্য। এখনো, কিছু   মানুষ স্ট্যাক ব্যবহার মান তাদের জন্য খুব দীর্ঘ যে খুঁজে   আবেদন; এটি একটি মিনিট বা তার বেশি হতে পারে।

আপনি SO_SNDTIMEO এর সাথে প্রেরণ () এবং recv () সময়সীমার সমন্বয় করতে পারেন   SO_RCVTIMEO setockopt () বিকল্পগুলি। ।

অন্য Winsock ফাংশন জন্য, সেরা সমাধান ব্লকিং এড়াতে হয়   সকেট সম্পূর্ণরূপে। অ ব্লকিং সকেট পদ্ধতি সব প্রদান   আপনার জন্য কাস্টম সময়সীমা নির্মাণ করার উপায়:

  • নির্বাচনহীন নন-ব্লকিং সকেট () - নির্বাচন () ফাংশনে পঞ্চম প্যারামিটার একটি টাইমআউট মান।

  • অ্যাসিঙ্ক্রোনাস সকেট - উইন্ডোজ এপিআই সেটটাইমার () ব্যবহার করুন।

  • ইভেন্ট অবজেক্ট - WSAWaitForMultipleEvents () একটি টাইমআউট পরামিতি আছে।

  • অপেক্ষাযোগ্য টাইমারস - CreateWaitableTimers () কে একটি ওয়েটেবল টাইমার তৈরি করতে কল করুন, যা আপনি WSAEventSelect (FSAEventSelect) মত একটি ফাংশনে পাস করতে পারেন।   আপনার সকেটের পাশাপাশি: যদি কোন সকেট আগে সংকেত করা হয়   টাইমার বন্ধ, ব্লকিং ফাংশন যাইহোক ফেরত হবে।

মনে রাখবেন যে অ্যাসিঙ্ক্রোনাস এবং নন-ব্লকিং সকেটগুলি দিয়ে আপনি সক্ষম হতে পারেন   পুরোপুরি সময়সীমা হ্যান্ডলিং এড়ানোর জন্য। আপনার প্রোগ্রাম কাজ চলতে থাকে   এমনকি উইনসক ব্যস্ত। সুতরাং, আপনি ব্যবহারকারীর কাছে এটি ছেড়ে দিতে পারেন   খুব বেশি সময় নিচ্ছে এমন একটি অপারেশন বাতিল করুন, অথবা শুধু উইনসককে ছেড়ে দিন   প্রাকৃতিক সময়সীমার মধ্যে এই কার্যকারিতা গ্রহণ করার পরিবর্তে মেয়াদ শেষ   তোমার গোপন সংকেত.

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.