前段时间写的程序跑了一段时间,发现当 socket send/receive data 一直在阻塞时并没有处理 timeout。
在 Unix 上边实现 socket timeout, 可以有三种方法:
1. 如果 socket 实现功能简单, 可以用Alarm signal 来处理 timeout
2. 用 Select()方法设置。此方法可以监听 socket 的状态,同时可以设置 Timeout 。
3. 用 setsockopt() 方法设置。此方法可以设置某一 socket 的属性,如每次接的数据大小,等等。它就含有 SO_RCVTIMEO 和 SO_SNDTIMEO 两种属性来设置接收/发送的 Timeout 。但是此方法只有部分系统支持, 其中 Solaris 就不支持。
我的程序就是跑在Solaris上 :(, 最后用第二种方法实现了。
在 Unix 上边实现 socket timeout, 可以有三种方法:
1. 如果 socket 实现功能简单, 可以用Alarm signal 来处理 timeout
2. 用 Select()方法设置。此方法可以监听 socket 的状态,同时可以设置 Timeout 。
3. 用 setsockopt() 方法设置。此方法可以设置某一 socket 的属性,如每次接的数据大小,等等。它就含有 SO_RCVTIMEO 和 SO_SNDTIMEO 两种属性来设置接收/发送的 Timeout 。但是此方法只有部分系统支持, 其中 Solaris 就不支持。
我的程序就是跑在Solaris上 :(, 最后用第二种方法实现了。