2013-05-01 131 views
1

在tcp客户端程序中使用connect()或在tcp服务器程序中接受() 许多可能的异常发生 例如,TCP SYN或TCP SYN/ACK丢失或一些其他错误如果connect()失败,则继续执行connect(),如果accept()失败,则接受()

(顺便说一句,我想知道,如果TCP SYN是地段,将连接()重新发送TCP SYN或只是产生一个错误?)

后容易源代码等

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

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

但是,如果我想尝试连接()或再次接受(), 是有可能或没有? 像

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

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

将这样的交易产生不可接受的后果?

此外send()和recv() 怎么样谢谢!

+0

优雅与它无关。问题是,你的功能要求是什么? – EJP 2013-05-01 22:48:57

回答

0

一般一旦acceptconnect失败,它们将总是失败,所以你的while循环在失败时只是无限循环。有一些例外情况(非阻塞套接字在EINPROGRESS或EAGAIN中失效),但通常当出现错误时,您需要检查错误代码并执行相应的操作,例如关闭套接字并打开一个新套接字。

+0

如何在丢失TCP SYN的情况下,将connect()函数重传? – misteryes 2013-05-01 21:30:45

+0

编号'connect()'失败并不意味着一个'SYN'数据包超时。 'connect()'失败意味着该包的所有*重传失败。您无需编写任何代码就可以使平台TCP堆栈简单地完成其工作。 – Glyph 2013-05-01 21:39:53

+0

那么send()recv(),fork()失败怎么样?如果他们失败了,这意味着我需要关闭这个套接字或退出程序? – misteryes 2013-05-02 12:22:32

相关问题