这次要谈的是connect()函数,出现的问题同样是因为某条语句写在了在循环之外。
socket = socket( AF_INET,SOCK_STREAM,0 );
//中间省略
while(1){
ret = connect( socket,(struct sockaddr *)&saddr,sizeof(saddr));
//省略
}
按照上面的代码运行,当第一次没有连接上,再进行第二次的连接时,如果此时连接成功,
程序接着运行,便会被信号中断。后来调查发现,虽然说socket的值不是0,但是当连接失败后,socket已经无效,需要再次取得socket。因此,需要把
socket = socket( AF_INET,SOCK_STREAM,0 );也放在循环体内。