# \[Feature:1.9\] backlog option for TCPServer and UNIXServer

**URL:** <https://www.ruby-forum.com/t/feature-1-9-backlog-option-for-tcpserver-and-unixserver/158057>\
**Category:** Development\
**Created:** [January 18, 2009, 9:03pm UTC](https://www.ruby-forum.com/t/feature-1-9-backlog-option-for-tcpserver-and-unixserver/158057 "2009-01-18T21:03:43Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [January 18, 2009, 9:03pm UTC](https://www.ruby-forum.com/t/feature-1-9-backlog-option-for-tcpserver-and-unixserver/158057/1 "2009-01-18T21:03:43Z")

</div>

e$B$J$+$@$G$9!#e(B

e$B0JA0$+$i$H$-$\*$jMWK\>$N$"$C$?$N$G!"e(B{TCP,UNIX}Server.newe$B$Ge(B  
listen()e$B$9$ke(Bbackloge$B$N?t$r;XDj$G$-$k$h$&$K$7$F$\_$^$7$?!#e(B

# [ruby-dev:35379]e$B$,F~$k$H$b$&\>/$74JC1$K=q$1$k$s$G$9$,!#e(B

# Index: ext/socket/rubysocket.h

— ext/socket/rubysocket.h (revision 21650)  
+++ ext/socket/rubysocket.h (working copy)  
@@ -215,4 +215,10 @@ VALUE s\_accept(VALUE klass, int fd, stru  
VALUE s\_accept\_nonblock(VALUE klass, rb\_io\_t \*fptr, struct sockaddr  
\*sockaddr, socklen\_t \*len);

+struct sock\_svrinit\_options {

- int backlog;  
+};  
+int sock\_svrinit\_opt(VALUE arg, struct sock\_svrinit\_options \*opt);  
+VALUE sock\_svrinit(VALUE sock, const struct sock\_svrinit\_options \*opt);
- 

# void Init\_basicsocket(void); void Init\_ipsocket(void); Index: ext/socket/unixserver.c

— ext/socket/unixserver.c (revision 21650)  
+++ ext/socket/unixserver.c (working copy)  
@@ -23,7 +23,13 @@  
\*/  
static VALUE  
-unix\_svr\_init(VALUE sock, VALUE path)  
+unix\_svr\_init(int argc, VALUE \*argv, VALUE sock)  
{

- return init\_unixsock(sock, path, 1);

- VALUE path;
- struct sock\_svrinit\_options opt;
- 
- if (argc \> 1 && sock\_svrinit\_opt(argv[argc-1], &opt)) --argc;
- if (argc == 1) path = argv[0];
- else rb\_scan\_args(argc, argv, “1”, &path);
- return sock\_svrinit(init\_unixsock(sock, path, 1), &opt);  
}

@@ -140,5 +146,5 @@ Init\_unixserver(void)  
#ifdef HAVE\_SYS\_UN\_H  
rb\_cUNIXServer = rb\_define\_class(“UNIXServer”, rb\_cUNIXSocket);

- rb\_define\_method(rb\_cUNIXServer, “initialize”, unix\_svr\_init, 1);

- rb\_define\_method(rb\_cUNIXServer, “initialize”, unix\_svr\_init, -1);  
rb\_define\_method(rb\_cUNIXServer, “accept”, unix\_accept, 0);  
rb\_define\_method(rb\_cUNIXServer, “accept\_nonblock”,  
unix\_accept\_nonblock, 0);  
Index: ext/socket/tcpserver.c  
===================================================================  
— ext/socket/tcpserver.c (revision 21650)  
+++ ext/socket/tcpserver.c (working copy)  
@@ -28,9 +28,12 @@ tcp\_svr\_init(int argc, VALUE \*argv, VALU  
{  
VALUE arg1, arg2;

- struct sock\_svrinit\_options opt;

- if (argc \> 1 && sock\_svrinit\_opt(argv[argc-1], &opt)) --argc;  
if (rb\_scan\_args(argc, argv, “11”, &arg1, &arg2) == 2)

- return init\_inetsock(sock, arg1, arg2, Qnil, Qnil, INET\_SERVER);

- sock = init\_inetsock(sock, arg1, arg2, Qnil, Qnil, INET\_SERVER);  
else

- return init\_inetsock(sock, Qnil, arg1, Qnil, Qnil, INET\_SERVER);

- sock = init\_inetsock(sock, Qnil, arg1, Qnil, Qnil, INET\_SERVER);
- return sock\_svrinit(sock, &opt);  
}

# Index: ext/socket/ipsocket.c

— ext/socket/ipsocket.c (revision 21650)  
+++ ext/socket/ipsocket.c (working copy)  
@@ -101,7 +101,4 @@ init\_inetsock\_internal(struct inetsock\_a  
arg-\>fd = -1;

- if (type == INET\_SERVER)
- listen(fd, 5);
- /\* create new instance \*/  
return init\_sock(arg-\>sock, fd);  
Index: ext/socket/socket.c  
===================================================================  
— ext/socket/socket.c (revision 21635)  
+++ ext/socket/socket.c (working copy)  
@@ -18,4 +18,33 @@ setup\_domain\_and\_type(VALUE domain, int  
}

+int  
+sock\_svrinit\_opt(VALUE arg, struct sock\_svrinit\_options \*opt)  
+{

- opt-\>backlog = 5;
- if (TYPE(arg) == T\_HASH) {
- VALUE x;
- ID id\_listen;
- CONST\_ID(id\_listen, “listen”);
- x = rb\_hash\_lookup(arg, ID2SYM(id\_listen));
- if (!NIL\_P(x) && (opt-\>backlog = NUM2INT(x)) \< 0) {
- 

```
 rb_raise(rb_eArgError, "negative backlog length: %d", 

```

opt-\>backlog)

- }
- return Qtrue;
- }
- return Qfalse;  
+}
- 

+VALUE  
+sock\_svrinit(VALUE sock, const struct sock\_svrinit\_options \*opt)  
+{

- rb\_io\_t \*fptr;
- 
- GetOpenFile(sock, fptr);
- if (opt-\>backlog \> 0 && listen(fptr-\>fd, opt-\>backlog)) {
- rb\_sys\_fail(“listen”);
- }
- return sock;  
+}
- 

/\*

- call-seq:  
Index: ext/socket/unixsocket.c  
===================================================================  
— ext/socket/unixsocket.c (revision 21650)  
+++ ext/socket/unixsocket.c (working copy)  
@@ -66,6 +66,4 @@ init\_unixsock(VALUE sock, VALUE path, in  
}

- if (server) listen(fd, 5);
- init\_sock(sock, fd);  
if (server) {

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [January 19, 2009, 2:08am UTC](https://www.ruby-forum.com/t/feature-1-9-backlog-option-for-tcpserver-and-unixserver/158057/2 "2009-01-19T02:08:04Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
Nobuyoshi N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B0JA0$+$i$H$-$\*$jMWK\>$N$"$C$?$N$G!"e(B{TCP,UNIX}Server.newe$B$Ge(B  
> listen()e$B$9$ke(Bbackloge$B$N?t$r;XDj$G$-$k$h$&$K$7$F$\_$^$7$?!#e(B

e$B$=$NMWK\>$C$F!“5!G=E\*$J$b$N$+!”=q$-J}$NOC$+!"$I$C$A$G$7$g$&$+e(B?

{TCPServer,UNIXServer}#listen e$B$H$$$&%a%=%C%I$,$“$j$^$9$,!”$3e(B  
e$B$l$r;H$&$N$KHf$Y$F!"$I$&$$$&0c$$$,K\>$^$l$F$$$k$N$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [January 19, 2009, 9:41am UTC](https://www.ruby-forum.com/t/feature-1-9-backlog-option-for-tcpserver-and-unixserver/158057/3 "2009-01-19T09:41:39Z")

</div>

e$B$J$+$@$G$9!#e(B

At Mon, 19 Jan 2009 10:06:10 +0900,  
Tanaka A. wrote in [ruby-dev:37785]:

> > e$B0JA0$+$i$H$-$\*$jMWK\>$N$"$C$?$N$G!"e(B{TCP,UNIX}Server.newe$B$Ge(B  
> > listen()e$B$9$ke(Bbackloge$B$N?t$r;XDj$G$-$k$h$&$K$7$F$\_$^$7$?!#e(B
> 
> e$B$=$NMWK\>$C$F!“5!G=E\*$J$b$N$+!”=q$-J}$NOC$+!"$I$C$A$G$7$g$&$+e(B?

e$B5!G=E\*$JOC$@$C$?$H;W$$$^$9!#e(B

> {TCPServer,UNIXServer}#listen e$B$H$$$&%a%=%C%I$,$"$j$^$9$,!"$3e(B  
> e$B$l$r;H$&$N$KHf$Y$F!"$I$&$$$&0c$$$,K\>$^$l$F$$$k$N$G$7$g$&$+!#e(B

e$B$?$7$+!“0lEYe(Blisten()e$B$r\<B9T$7$F$7$^$&$H:FEY@\_Dj$7$J$\*$9$3$H$O$G$-e(B  
e$B$J$$4D6-$,$”$k$H$+!"$@$C$?$h$&$J!#$&$m3P$($J$N$G$$$D=P$F$-$?OC$Je(B  
e$B$N$+3NG’$G$-$^$;$s$,!#e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [January 19, 2009, 12:29pm UTC](https://www.ruby-forum.com/t/feature-1-9-backlog-option-for-tcpserver-and-unixserver/158057/4 "2009-01-19T12:29:11Z")

</div>

In article [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid),  
Nobuyoshi N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

> e$B$?$7$+!“0lEYe(Blisten()e$B$r\<B9T$7$F$7$^$&$H:FEY@\_Dj$7$J$\*$9$3$H$O$G$-e(B  
> e$B$J$$4D6-$,$”$k$H$+!"$@$C$?$h$&$J!#$&$m3P$($J$N$G$$$D=P$F$-$?OC$Je(B  
> e$B$N$+3NG’$G$-$^$;$s$,!#e(B

e$B6qBNE\*$K$O$I$N4D6-$G$=$&$J$k$N$+6=L#$,$"$j$^$9!#$I$J$?$+8fB8e(B  
e$B$8$G$7$?$i65$($F$/$@$5$$!#e(B

e$B$J$\*!"\<j85$G$9$0$K;n$;$?e(B GNU/Linux e$B$He(B FreeBSD e$B$G$O!"e(B  
2e$B2se(B listen e$B$9$k$H!“8e$N@\_Dj$,@8$-$F$$$k$h$&$G!”:F@\_Dj$G$-$ke(B  
e$B$h$&$G$9!#e(B

---

<div class="post-metadata">

**Author:** ![nobu](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/e9c0ed/32.png) [@nobu](https://www.ruby-forum.com/u/nobu)\
**Post date:** [January 19, 2009, 1:52pm UTC](https://www.ruby-forum.com/t/feature-1-9-backlog-option-for-tcpserver-and-unixserver/158057/5 "2009-01-19T13:52:31Z")

</div>

In message [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)  
on Mon, 19 Jan 2009 20:26:42 +0900,  
Tanaka A. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> e$B$J$\*!"\<j85$G$9$0$K;n$;$?e(B GNU/Linux e$B$He(B FreeBSD e$B$G$O!“e(B  
> 2e$B2se(B listen e$B$9$k$H!“8e$N@\_Dj$,@8$-$F$$$k$h$&$G!”:F@\_Dj$G$-$ke(B  
> e$B$h$&$G$9!#e(B  
> e$B%m!\<%I!&%”%Y%l!\<%8$,\>e$,$C$?$H$-$Ne(BSMTPe$B$N@\B3$r5qH]$K!“e(Bsendmaile$B$,e(B  
> listen(2)e$B$N%P%C%/%m%0$r%\<%m$K$9$k!”$H$$$C$?$3$H$r$7$F$$$?$H5-21$7e(B  
> e$B$F$$$^$9!#e(B

Berkelye$BM3Mh$N%=%1%C%H!&%$%s%?!\<%U%'%$%9$rCi\<B$K\<BAu$7$F$$$ke(B(or  
e$B$G$-$Fe(B  
e$B$$$ke(B)e$B$b$N$K$D$$$F$OF0:n$9$k$O$:$G$9!#e(B
