网络编程--Address already in use 问题

来源:互联网 发布:桌面 滚动屏软件 编辑:程序博客网 时间:2024/04/28 05:21

初学socket编程,好容易调好一个双向tcp的简单通信,一直有些不舒服的是,当程序结束后,再次运行时
总会perror抛出Address already in use的问题

网上找了找资料,

bind 普遍遭遇的问题是试图绑定一个已经在使用的端口。该陷阱是也许没有活动的套接字存在,但仍然禁止绑定端口(bind 返回 EADDRINUSE),它由 TCP 套接字状态 TIME_WAIT 引起。该状态在套接字关闭后约保留 2 到 4 分钟。在 TIME_WAIT 状态退出之后,套接字被删除,该地址才能被重新绑定而不出问题。
等待 TIME_WAIT 结束可能是令人恼火的一件事,特别是如果您正在开发一个套接字服务器,就需要停止服务器来做一些改动,然后重启。幸运的是,有方法可以避开 TIME_WAIT 状态。可以给套接字应用 SO_REUSEADDR 套接字选项,以便端口可以马上重用。

int on=1;if((setsockopt(fd_sock,SOL_SOCKET,    SO_REUSEADDR,&on,sizeof(on)))<0){    perror("setsockopt");    return(-1);}

于是结合man手册,通过以上函数,使得端口可以立即重用

0 0
原创粉丝点击