مقبس ضبط مكالمة connect المهلة
سؤال
هل هناك أي طريقة في بيئة Win32 ل"لحن" المهلة على مكالمة connect()
مأخذ؟ على وجه التحديد، وأود أن زيادة طول المهلة. مآخذ في استخدام وغير مؤمن. شكرا!
المحلول
نعم، هذا ممكن.
إذا كنت في وضع غير مؤمن بعد connect()
، عادة استخدام select()
أ > الانتظار حتى I / O مستعدة لذلك. هذه وظيفة لديها معلمة لتحديد قيمة المهلة وسيعود 0 في حالة وجود مهلة.
نصائح أخرى
ويمكنك محاولة استخدام SO_RCVTIMEO وSO_SNDTIMEO خيارات مقبس لتحديد مهلة لأية عمليات مأخذ. مثال:
struct timeval timeout;
timeout.tv_sec = 10;
timeout.tv_usec = 0;
if (setsockopt (sockfd, SOL_SOCKET, SO_RCVTIMEO, (char *)&timeout,
sizeof(timeout)) < 0)
error("setsockopt failed\n");
if (setsockopt (sockfd, SOL_SOCKET, SO_SNDTIMEO, (char *)&timeout,
sizeof(timeout)) < 0)
error("setsockopt failed\n");
ويمكنك أيضا محاولة التنبيه (). عينة:
signal( SIGALRM, connect_alarm ); /* connect_alarm is you signal handler */
alarm( secs ); /* secs is your timeout in seconds */
if ( connect( fd, addr, addrlen ) < 0 )
{
if ( errno == EINTR ) /* timeout, do something below */
...
}
alarm( 0 ); /* cancel the alarm */
لا، هذا غير ممكن. يمكن تخفيض المهلة الاتصال الافتراضية، ولكن ليس زيادة.
لا تنتمي إلى StackOverflow