From: Motohiro KOSAKI Date: 2011-08-07T23:55:49+09:00 Subject: [ruby-core:38835] [Ruby 1.9 - Feature #4645][Feedback] Pass existing buffer to getsockopt Issue #4645 has been updated by Motohiro KOSAKI. Status changed from Open to Feedback ---------------------------------------- Feature #4645: Pass existing buffer to getsockopt http://redmine.ruby-lang.org/issues/4645 Author: Brian Candler Status: Feedback Priority: Normal Assignee: Category: Target version: There are cases when you need to pass a pre-initialized buffer to getsockopt, but ruby currently doesn't support this. For an example, see the API used by iptables to manipulate the firewall rulesets (below). You have to set the table name in the buffer passed to getsockopt; the call then modifies the remainder of the buffer. So I propose that BasicSocket#getsockopt be enhanced to allow an optional third parameter, which is an existing String buffer, used both to pass data and receive the result. Does this sound reasonable? Regards, Brian. -------- 8< ---------------------------------------------- /* extract from iptables-1.4.4/libiptc/libiptc.c */ struct xtc_handle * TC_INIT(const char *tablename) { STRUCT_GETINFO info; socklen_t s; int sockfd; ... s = sizeof(info); strcpy(info.name, tablename); if (getsockopt(sockfd, TC_IPPROTO, SO_GET_INFO, &info, &s) < 0) { close(sockfd); return NULL; } DEBUGP("valid_hooks=0x%08x, num_entries=%u, size=%u\n", info.valid_hooks, info.num_entries, info.size); ... -- http://redmine.ruby-lang.org