如果connect()失败则继续执行connect()是优雅的,如果accept()失败则继承accept()

时间:2013-05-01 19:06:03

标签: networking network-programming

在tcp客户端程序中使用connect()或在tcp服务器程序中使用accept()时 可能发生许多可能的例外 例如,TCP SYN或TCP SYN / ACK丢失或其他一些错误

(顺便说一下,我想知道,如果TCP SYN很多,会连接()重新传输TCP SYN还是只会产生错误?)

通常源代码就像

if(connect()<0){
 ...
 exit(1);
}

if (accept()<)){
 ...
 exit(1);
}

但是,如果我想再次尝试connect()或accept(), 有可能吗? 像

while(connect()<0){
       continue;
}

while(accept()<0){
      continue;
}
这样的交易会产生不可接受的后果吗?

另外,send()和recv()怎么样 谢谢!

1 个答案:

答案 0 :(得分:0)

通常一旦acceptconnect失败,它们将始终失败,因此你的while循环在失败时只是无限循环。有一些例外(使用EINPROGRESS或EAGAIN'失败'的非阻塞套接字),但通常在出现错误时,您需要检查错误代码并执行适当的操作,例如关闭套接字并打开新套接字。 / p>