【发布时间】:2014-04-03 03:34:44
【问题描述】:
Socket 编程在不同的 UNIX 风格(Linux、Solaris、FreeBSD、Mac OS 等)中可能存在细微差别。例如,一个程序可能运行良好 在 Linux 下,但不是 Solaris,因为 Solaris 不提供套接字选项。如果幸运的话,可以在操作系统手册中参考它,但如果没有,这个陷阱 可能要花你一天的时间。 这些技巧可能不是一两本书就能得到的,都是工程师的经验。我认为这些技巧不仅可以帮助新手,也可以帮助有经验的人。
我希望我们可以分享这些技巧。作为示例,我将展示 Solaris 套接字编程中的以下技巧:
- 添加以下链接选项:“-lresolv -lnsl -lsocket”;
- Solaris 不提供套接字选项:SO_SNDTIMEO 和 SO_RCVTIMEO;(https://stackoverflow.com/questions/15264801/why-does-solaris-os-define-so-sndtimeo-and-so-rcvtimeo-socket-options-in-header)
- 在 SCTP 编程中。必须在调用 sctp_bindx() 之前调用 bind();(sctp_bindx (Solaris sctp library) always return "Invalid argument")
- 在监听套接字上调用shutdown()会导致ENOTCONN错误。(Why shutdown a socket can't let the select() return?)
谁能提供有关不同 UNIX 风格的套接字编程的其他技巧?
【问题讨论】:
标签: c sockets unix network-programming