2015-10-05 19 views
1

Crossposted,原帖是在Ruby Forum,但并没有引起任何反应,到目前为止有关套接字选项的常量记录在哪里?

使用方法setsockopt,我可以在插座上设置各种选项,例如 Socket::SO_REUSEADDR。我想知道

  • 什么常数是可用的(意思,拼写),
  • 他们采取哪些价值,并
  • 什么是默认值(对于给定的套接字类型)

我搜索了一段时间,但除了一些例子,我找不到 关于此主题的任何文档,即使在official docs。有人知道我应该看什么吗?

+0

这些是标准的unix标志。例如:http://www.unixguide.net/network/socketfaq/4.5.shtml –

+3

另外'man getsockopt' –

+2

Ruby中的'Socket'类只是操作系统中基本UNIX套接字的一个简单包装。要详细了解这些选项如何影响套接字,请参阅您的操作系统文档。请注意,这些选项有时与操作系统有关,可能具有不同的名称或含义,甚至可能不存在于不同的操作系统上。 –

回答

1

让我们一步一步来。

Socket来自stdlib

有了RVM管理安装,该文件位于:

$HOME/.rvm/rubies/ruby-2.2.3/lib/ruby/2.2.0/socket.rb 

(这会帮助你找到它在不同类型的设施太)。

如果您查看文件的来源,您会看到它以require 'socket.so'开头。这意味着红宝书库socket取决于Unix shared librarysocket.so

获取更多信息的最佳方式是通过Unix手册页。在这种情况下:

man setsockopt 
0

解决:当无响应的发布没有直接回答了这个问题(我的系统(Cygwin的)不包含在插座标志的描述上的getsockopt/setsockopt的手册页和插座常见问题仅解释了一些标志,而不是所有标志的列表),它们都帮助我找出答案。

首先,我在网上找到了这个getsockopt​​,这是相当详细的。

此外,由于我从答案中了解到,该socket.rb只是本地C上的一个层,我得出结论:哪些套接字选项真的可用,取决于使用哪个编译器/库和哪个socket.h文件,当编译Ruby。

尽管我不知道Ruby是如何在Cygwin平台上实现的,但假设使用/usr/include/asm/socket.h并不是不合理的,并且此文件确实包含可用选项的列表(以及对其含义的简要描述)。