Date: Sun, 6 Dec 1998 12:10:53 -0500 From: "Jim Flowers" <jflowers@ezo.net> To: <freebsd-hackers@FreeBSD.ORG>, <freebsd-net@FreeBSD.ORG> Subject: Help with TCP listen() function Message-ID: <000d01be213b$625d6eb0$848266ce@crocus.ezo.net>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. ------=_NextPart_000_000A_01BE2111.78BC2770 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable I am trying to port a cable modem (roadrunner) login program written for = linux to freebsd 2.2.7 before the Dec 15 deadline. Should have been = suspicious when it compiled cleanly without error message. The program runs up to the point of setting up a TCP socket to request a = login sequence using functions: socket() htons() bind() listen() and then quits with errnum for "Operation not supported". The function calls seem to be correctly written and do not return any = errors when called (except for listen()). Is this a correct sequence to establish a passive tcp connection? Is = there a better way to do it? Is there a knowledge base for converting = linux code to run on FreeBSD? References for the correct way to write = code to establish tcp connections? If a review of the code segment would be helpful, it is brief and = follows. Thanks Jim Flowers <jflowers@ezo.net> //------------------------------------------------------------ // RRListen() - Creates a listen socket for session status and // restart requests int RRListen(unsigned short *listenport) { unsigned short port; int s; struct sockaddr_in saddr; if ((s =3D socket (AF_INET, SOCK_DGRAM, 0)) < 0) { syslog(LOG_ERR, "Error creating listen socket: %m"); return -1; } // Bind first available port starting at 7770 port =3D 7770; saddr.sin_family =3D AF_INET; saddr.sin_addr.s_addr =3D INADDR_ANY; do { saddr.sin_port =3D htons(port); errno =3D 0; if (bind(s, (struct sockaddr *) &saddr, sizeof(struct = sockaddr_in)) < 0) { if (errno !=3D EADDRINUSE) { syslog(LOG_ERR, "Error binding listen socket: %m"); close(s); return -1; } else { port++; } } } while (errno =3D=3D EADDRINUSE); if (listen(s, 1) < 0) { syslog(LOG_ERR, "Error listening on socket: %m"); close(s); return -1; } *listenport =3D port; syslog(LOG_INFO, "Established listener on port: %i", port); return s; ) -------------------------------------------------------------------------= ------ ------=_NextPart_000_000A_01BE2111.78BC2770 Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable <!DOCTYPE HTML PUBLIC "-//W3C//DTD W3 HTML//EN"> <HTML> <HEAD> <META content=3Dtext/html;charset=3Diso-8859-1 = http-equiv=3DContent-Type> <META content=3D'"MSHTML 4.72.2106.6"' name=3DGENERATOR> </HEAD> <BODY bgColor=3D#ffffff> <DIV><FONT color=3D#000000 size=3D2>I am trying to port a cable modem = (roadrunner)=20 login program written for linux to freebsd 2.2.7 before the Dec 15=20 deadline. Should have been suspicious when it compiled cleanly = without=20 error message.</FONT></DIV> <DIV><FONT color=3D#000000 size=3D2></FONT> </DIV> <DIV><FONT size=3D2>The program runs up to the point of setting up a TCP = socket to=20 request a login sequence using functions:</FONT></DIV> <DIV><FONT size=3D2></FONT> </DIV> <DIV><FONT size=3D2>socket()</FONT></DIV> <DIV><FONT size=3D2>htons()</FONT></DIV> <DIV><FONT size=3D2>bind()</FONT></DIV> <DIV><FONT size=3D2>listen()</FONT></DIV> <DIV><FONT size=3D2></FONT> </DIV> <DIV><FONT size=3D2>and then quits with errnum for "Operation not=20 supported".</FONT></DIV> <DIV><FONT size=3D2></FONT> </DIV> <DIV><FONT size=3D2>The function calls seem to be correctly written and = do not=20 return any errors when called (except for listen()).</FONT></DIV> <DIV><FONT size=3D2></FONT> </DIV> <DIV><FONT size=3D2>Is this a correct sequence to establish a passive = tcp=20 connection? Is there a better way to do it? Is there a knowledge = base for=20 converting linux code </FONT><FONT size=3D2>to run on FreeBSD? = References=20 for the correct way to write code to establish tcp = connections?</FONT></DIV> <DIV><FONT size=3D2></FONT> </DIV> <DIV><FONT size=3D2>If a review of the code segment would be helpful, it = is brief=20 and follows.</FONT></DIV> <DIV><FONT size=3D2></FONT> </DIV> <DIV><FONT size=3D2>Thanks</FONT></DIV> <DIV><FONT color=3D#000000 size=3D2>Jim Flowers <<A=20 href=3D"mailto:jflowers@ezo.net">jflowers@ezo.net</A>></FONT></DIV> <DIV><FONT color=3D#000000 size=3D2></FONT> </DIV> <DIV> </DIV> <DIV><FONT color=3D#000000=20 size=3D2>//------------------------------------------------------------<B= R>//=20 RRListen() - Creates a listen socket for session status=20 and<BR>// &nbs= p; =20 restart requests<BR>int RRListen(unsigned short=20 *listenport)<BR>{<BR> unsigned short port;<BR> int=20 s;<BR> struct sockaddr_in saddr;</FONT></DIV> <DIV><FONT color=3D#000000 size=3D2></FONT> </DIV> <DIV><FONT color=3D#000000 size=3D2> if ((s =3D socket = (AF_INET,=20 SOCK_DGRAM, 0)) < 0) {<BR> = syslog(LOG_ERR,=20 "Error creating listen socket: = %m");<BR> =20 return -1;<BR> }</FONT></DIV> <DIV><FONT color=3D#000000 size=3D2></FONT> </DIV> <DIV><FONT color=3D#000000 size=3D2> // Bind first available port = starting at=20 7770<BR> port =3D 7770;<BR> saddr.sin_family =3D = AF_INET;<BR> saddr.sin_addr.s_addr =3D = INADDR_ANY;<BR> do=20 {<BR> saddr.sin_port =3D=20 htons(port);<BR> errno =3D=20 0;<BR> if (bind(s, (struct sockaddr *) = &saddr,=20 sizeof(struct sockaddr_in)) < 0) {<BR> if (errno !=3D = EADDRINUSE)=20 {<BR> =20 syslog(LOG_ERR, "Error binding listen socket:=20 %m");<BR>  = ;=20 close(s);<BR> = return=20 -1;<BR> } else=20 {<BR> =20 port++;<BR> =20 }<BR> }<BR> } while (errno =3D=3D=20 EADDRINUSE);</FONT></DIV> <DIV><FONT color=3D#000000 size=3D2></FONT> </DIV> <DIV><FONT color=3D#000000 size=3D2> if (listen(s, 1) < 0)=20 {<BR> syslog(LOG_ERR, "Error listening on = socket:=20 %m");<BR> = close(s);<BR> =20 return -1;<BR> }</FONT></DIV> <DIV><FONT color=3D#000000 size=3D2></FONT> </DIV> <DIV><FONT color=3D#000000 size=3D2> *listenport =3D = port;<BR> =20 syslog(LOG_INFO, "Established listener on port: %i",=20 port);<BR> return s;<BR>)</FONT></DIV> <DIV><FONT color=3D#000000=20 size=3D2>----------------------------------------------------------------= ---------------</FONT></DIV></BODY></HTML> ------=_NextPart_000_000A_01BE2111.78BC2770-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-hackers" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?000d01be213b$625d6eb0$848266ce>