Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 06 Dec 1998 11:17:22 -0500
From:      "Louis A. Mamakos" <louie@TransSys.COM>
To:        "Jim Flowers" <jflowers@ezo.net>
Cc:        freebsd-hackers@FreeBSD.ORG, freebsd-net@FreeBSD.ORG
Subject:   Re: Help with TCP listen() function 
Message-ID:  <199812061617.LAA54526@whizzo.transsys.com>
In-Reply-To: Your message of "Sun, 06 Dec 1998 12:10:53 EST." <000d01be213b$625d6eb0$848266ce@crocus.ezo.net> 
References:  <000d01be213b$625d6eb0$848266ce@crocus.ezo.net> 

next in thread | previous in thread | raw e-mail | index | archive | help

The problem is that you're not trying to do a TCP "listen" operation; you're
creating a UDP datagram socket, and not a TCP (SOCK_STREAM) type socket.  The
listen system call isn't defined to work on datagram sockets because there
are no new connections to be accepted.

This is probably a freebsd-questions mailing list issue for any follow-up.

louie

> 
> ------=_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.&nbsp; Should have been suspicious when it compiled cleanly =
> without=20
> error message.</FONT></DIV>
> <DIV><FONT color=3D#000000 size=3D2></FONT>&nbsp;</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>&nbsp;</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>&nbsp;</DIV>
> <DIV><FONT size=3D2>and then quits with errnum for &quot;Operation not=20
> supported&quot;.</FONT></DIV>
> <DIV><FONT size=3D2></FONT>&nbsp;</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>&nbsp;</DIV>
> <DIV><FONT size=3D2>Is this a correct sequence to establish a passive =
> tcp=20
> connection?&nbsp; 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?&nbsp; =
> References=20
> for the correct way to write code to establish tcp =
> connections?</FONT></DIV>
> <DIV><FONT size=3D2></FONT>&nbsp;</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>&nbsp;</DIV>
> <DIV><FONT size=3D2>Thanks</FONT></DIV>
> <DIV><FONT color=3D#000000 size=3D2>Jim Flowers &lt;<A=20
> href=3D"mailto:jflowers@ezo.net">jflowers@ezo.net</A>&gt;</FONT></DIV>
> <DIV><FONT color=3D#000000 size=3D2></FONT>&nbsp;</DIV>
> <DIV>&nbsp;</DIV>
> <DIV><FONT color=3D#000000=20
> size=3D2>//------------------------------------------------------------<B=
> R>//=20
> RRListen() - Creates a listen socket for session status=20
> and<BR>//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
> p;&nbsp;&nbsp;=20
> restart requests<BR>int RRListen(unsigned short=20
> *listenport)<BR>{<BR>&nbsp;unsigned short port;<BR>&nbsp;&nbsp; int=20
> s;<BR>&nbsp;&nbsp; struct sockaddr_in saddr;</FONT></DIV>
> <DIV><FONT color=3D#000000 size=3D2></FONT>&nbsp;</DIV>
> <DIV><FONT color=3D#000000 size=3D2>&nbsp;&nbsp; if ((s =3D socket =
> (AF_INET,=20
> SOCK_DGRAM, 0)) &lt; 0) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =
> syslog(LOG_ERR,=20
> &quot;Error creating listen socket: =
> %m&quot;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
> return -1;<BR>&nbsp;&nbsp; }</FONT></DIV>
> <DIV><FONT color=3D#000000 size=3D2></FONT>&nbsp;</DIV>
> <DIV><FONT color=3D#000000 size=3D2>&nbsp;// Bind first available port =
> starting at=20
> 7770<BR>&nbsp;&nbsp; port =3D 7770;<BR>&nbsp;&nbsp; saddr.sin_family =3D =
> 
> AF_INET;<BR>&nbsp;&nbsp; saddr.sin_addr.s_addr =3D =
> INADDR_ANY;<BR>&nbsp;&nbsp; do=20
> {<BR>&nbsp;&nbsp;&nbsp; saddr.sin_port =3D=20
> htons(port);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; errno =3D=20
> 0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (bind(s, (struct sockaddr *) =
> &amp;saddr,=20
> sizeof(struct sockaddr_in)) &lt; 0) {<BR>&nbsp;if (errno !=3D =
> EADDRINUSE)=20
> {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
> syslog(LOG_ERR, &quot;Error binding listen socket:=20
> %m&quot;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
> ;=20
> close(s);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
>  return=20
> -1;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else=20
> {<BR>&nbsp;&nbsp;&nbsp;=20
> port++;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=20
> }<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<BR>&nbsp;} while (errno =3D=3D=20
> EADDRINUSE);</FONT></DIV>
> <DIV><FONT color=3D#000000 size=3D2></FONT>&nbsp;</DIV>
> <DIV><FONT color=3D#000000 size=3D2>&nbsp;if (listen(s, 1) &lt; 0)=20
> {<BR>&nbsp;&nbsp;&nbsp;&nbsp; syslog(LOG_ERR, &quot;Error listening on =
> socket:=20
> %m&quot;);<BR>&nbsp;&nbsp;&nbsp;&nbsp; =
> close(s);<BR>&nbsp;&nbsp;&nbsp;&nbsp;=20
> return -1;<BR>&nbsp;&nbsp; }</FONT></DIV>
> <DIV><FONT color=3D#000000 size=3D2></FONT>&nbsp;</DIV>
> <DIV><FONT color=3D#000000 size=3D2>&nbsp;&nbsp; *listenport =3D =
> port;<BR>&nbsp;&nbsp;=20
> syslog(LOG_INFO, &quot;Established listener on port: %i&quot;,=20
> port);<BR>&nbsp;&nbsp; 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



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-net" in the body of the message



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199812061617.LAA54526>