[lug] source for bind(int sockfd, struct sockaddr *my_addr, int addrlen)

Matt McIllece (1-3762) mcillece at elbonia.ast.lmco.com
Wed Apr 18 12:05:42 MDT 2001


>> I'm just using the description from the manpage.  Is it incorrect?
>> 
>> BIND(2)             Linux Programmer's Manual             BIND(2)
>> 
>> NAME
>>        bind - bind a name to a socket
>
>It's correct, but it's confusing terminology.  bind() associates an
>address, address family, and a port with a file descriptor.  This is
>usually done when you're writing network servers, just before calling
>listen(), which will begin accepting connections.
>

Got it.  I'll use the less confusing terms from now on.

>When you write a program in C that uses bind(), you'll need to put:
>
>#include "sys/types.h"
>#include "sys/socket.h"
>
>at the top of your source code.  If you look at these files, which are
>/usr/include/sys/types.h and /usr/include/sys/socket.h, the interface
>for the bind() function is provided in socket.h

Yes, but on my machine,

  find /usr/src -name "socket.h" -print | xargs grep -ni bind

produces only a reference to

  /usr/src/linux-2.2.12/include/asm-i386/socket.h:36:#define SO_BINDTODEVICE
25

which has nothing to do with the interface for bind().  I'm curious, what do you 
get on your machine?


>I don't know where KRUD's sources are, but you might as well go to the
>other source: ftp://ftp.gnu.org/gnu/glibc/glibc-2.2.2.tar.gz
>

Thanks for the link.

>I suspect what you'll find there is a wrapper and sanity check before
>it sends it on to the appropriate place in the kernel, wherever that
>is.

I suspected that, but it didn't turn out that way.  (see my  11:33:30 -0600 
(MDT) post - when it finally posts, that is).


>Have a look at net/socket.c in the kernel tree, for the sys_bind()
>function.  I believe things are broken up a little more by protocol
>somewhere, so have a look at inet_bind() in net/ipv4/af_inet.c, or
>raw_bind() in net/ipv4/raw.c or in any number of other places
>depending on what type of socket you're interested in learning the
>source code for.  Do a recursive grep for 'bind' in the kernel tree
>and have fun.
>

Thanks.  I did this earlier and posted about it, but the mail seems especially 
slow for me today.

>Of course, where you should look depends on what, specifically, you
>want the source code for.
>

I want the source code for bind() so I can see how it does what it does...




More information about the LUG mailing list