socket小实例
2015-12-25 14:02
253 查看
时间服务器timerserver.c
客户端timerclient.c
在客户端输入服务器的地址,获取时间信息:
服务器端是一个死循环,当结束服务器进程时使用了’CTRL+C’,再次运行时出现如下情况发生:
socket隐患:地址使用错误(EADDRINUSE)。
bind 普遍遭遇的问题是试图绑定一个已经在使用的端口。该陷阱是也许没有活动的套接字存在,但仍然禁止绑定端口(bind 返回 EADDRINUSE),它由 TCP 套接字状态 TIME_WAIT 引起。该状态在套接字关闭后约保留 2 到 4 分钟。在 TIME_WAIT 状态退出之后,套接字被删除,该地址才能被重新绑定而不出问题。 可以给套接字应用 SO_REUSEADDR 套接字选项,以便端口可以马上重用。
setsockopt函数 设定socket套接字选项SO_REUSEADDR为on(on值为1)。
在timerserver.c的第19行之后加入以下语句:
在应用了 SO_REUSEADDR 选项之后,bind API 函数将允许地址的立即重用。
客户端timerclient.c
在客户端输入服务器的地址,获取时间信息:
服务器端是一个死循环,当结束服务器进程时使用了’CTRL+C’,再次运行时出现如下情况发生:
socket隐患:地址使用错误(EADDRINUSE)。
bind 普遍遭遇的问题是试图绑定一个已经在使用的端口。该陷阱是也许没有活动的套接字存在,但仍然禁止绑定端口(bind 返回 EADDRINUSE),它由 TCP 套接字状态 TIME_WAIT 引起。该状态在套接字关闭后约保留 2 到 4 分钟。在 TIME_WAIT 状态退出之后,套接字被删除,该地址才能被重新绑定而不出问题。 可以给套接字应用 SO_REUSEADDR 套接字选项,以便端口可以马上重用。
setsockopt函数 设定socket套接字选项SO_REUSEADDR为on(on值为1)。
在timerserver.c的第19行之后加入以下语句:
int on = 1; ret = setsockopt( listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on) );
在应用了 SO_REUSEADDR 选项之后,bind API 函数将允许地址的立即重用。
相关文章推荐
- Android 图片Exif信息相关的获取与修改
- Activity Task
- 用OKR制定目标
- 程序员最好的时代来了(3)
- 搭建Apache+mod_wsgi+python+flask+virtualenv网站正式环境
- Web.xml配置详解之context-param
- 行为型:设计模式之解释器模式(二十二)
- Java String.split用法小结
- 获取未安装的App信息
- 小谈APP产品设计
- FaceBook开源Fresco介绍
- 在线旅游平台如何借监控宝确保第三方API高可用
- RAID学习总结
- Windows 10 之重新安装应用
- Windows 10 之重新安装应用
- 帆软报表FineReport中数据连接之Tomcat配置JNDI连接
- pthread_cond_wait() 使用
- LeetCode 043 Multiply Strings
- 隐藏TabBar,真机有效
- iOS流布局UICollectionView系列六——将布局从平面应用到空间