tcp socket连接断开后重连失败

babachou 2012-06-06 04:52:03
下边是部分代码

server端:
iListenSocketFd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if(iListenSocketFd == -1) {
bsd_syslog_err("Error : Init tcp server socket failed.\n");
} else {
tcpServerAddr.sin_family = AF_INET;
tcpServerAddr.sin_port = htons(44444);
tcpServerAddr.sin_addr.s_addr = 0;
setsockopt(iListenSocketFd, SOL_SOCKET, SO_REUSEADDR, &iReuseAddrFlag, sizeof(int));

if ((bind(iListenSocketFd, (struct sockaddr *)&tcpServerAddr, sizeof(struct sockaddr))) < 0) {
bsd_syslog_err("Error : Bind tcp server socket failed.\n");
} else {
if((listen(iListenSocketFd, 5)) < 0) {
bsd_syslog_err("Error : Listen tcp server socket failed.\n");
}
}
}

client端:
iClientSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

if(iClientSocket == -1) {
bsd_syslog_err("Error : Init tcp client socket failed.\n");
} else {
setsockopt(iClientSocket, SOL_SOCKET, SO_REUSEADDR, &iReuseAddrFlag, sizeof(int));
if(connect(iClientSocket, (struct sockaddr *)&serverAddr, iAddrLen) < 0) {
bsd_syslog_err("Error : connect to peer failed.\n");
} else {
iReturnValue = bsdTcpCheckFunc(iClientSocket, pDesPath, BSD_FILE_MEMERY_CHECK, &tcpSendFileInfo);
}
}

if(iClientSocket != -1) {
close(iClientSocket);
}


第一次客户端建立连接,发消息,收消息,都没有问题,但是断开以后,第二次再调用客户端这边,创建的socketid和上次一样的,但是connect就返回失败了,请教大家是什么原因,是close后有什么超时机制吗,但是第二次虽然ID一样,socket确实是重新创建的
...全文
1085 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2012-06-06
  • 打赏
  • 举报
回复
有可能是对端不listen了
qiuxin315 2012-06-06
  • 打赏
  • 举报
回复
楼主先把产生错误的错误码打印出来看看。
socket倒是有一个端口关闭后,不能立即使用的逻辑,具体的看TCP/IP详解,也可以设置成关闭端口后立即能有。
何日人再来 2012-06-06
  • 打赏
  • 举报
回复
你是怎么关闭的?代码呢?
www_adintr_com 2012-06-06
  • 打赏
  • 举报
回复
服务器端都没看到有 accept 调用呢

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧