问题现象(VxWorks):
在测试的时候发现使用ctrl+c打断程序后再次调用bind绑定失败
错误返回 0x30
问题分析:
1、程序没有开启端口复用。
2、程序在使用ctrl+c打断后 vxWorks的打断和linux不相同,并没有清除底层的端口,和socket状态。
解决办法:
1、加上IP复用:
if (setsockopt(server_socket, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)) < 0) {
perror("setsockopt failed");
close(server_socket);
return ;
}
2、加上端口复用
if (setsockopt(server_socket, SOL_SOCKET, SO_REUSEPORT, &optval, sizeof(optval)) < 0) {
perror("setsockopt failed");
close(server_socket);
return ;
}
3、取消使用ctrl+c打断的方式,使用任务管理
1、主任务创建 子任务
2、子任务创建socket
3、预留接口关闭任务和socket
解决现象,解决异常,功能实现