bind(2) na neexistujici rozhrani

David Rohleder davro na ics.muni.cz
Pondělí Listopad 26 21:29:18 CET 2001


jikos na jikos.cz (Jirka Kosina) writes:


> Tak to je opravdu zajimave.
> 
> [jikos na twin q]$ cat q.c
> #include <sys/types.h>
> #include <sys/socket.h>
> #include <netinet/in.h>
> #include <arpa/inet.h>
> #include <stdlib.h>
> 
>  main(int argc, char *argv[])
>  {
>      int    sockfd;
>      struct sockaddr_in serv_addr;
>      int opt=1;
> 
>      srandom(time(0));
>      if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)
>         exit(-1);
> 
> 
>      if(setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt))!=0)
>         exit(-1);
> 
>      bzero((char *) &serv_addr, sizeof(serv_addr));
>      serv_addr.sin_family      = AF_INET;
>      serv_addr.sin_addr.s_addr = htonl(random()/1000); //nahodne cislo ;)
>      serv_addr.sin_port        = htons(1234);
> 
>      if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 
> 0)
>         exit(-1);
> 
>  }
> 
> [jikos na twin q]$ cc q.c
> [jikos na twin q]$ strace ./a.out 2> x.x
> [jikos na twin q]$ cat x.x | grep bind
> bind(4, {sin_family=AF_INET, sin_port=htons(1234), 
> sin_addr=inet_addr("0.10.132.186")}}, 16) = 0
> 
> Kdyz to poustim vickrat, snazi se to tam dosadit ruzne IP adresy a pokazde 
> to uspeje.
> 
> Ted jsem to zkousel na 2.4.9, muzu zkusit i na jinych, pripadne se zavrtat 
> nekam do zdrojaku jadra.

Mne ten program funguje i na 2.4.14.

> 
> Je to divne.
> 
> Nebo jsem spravne nepochopil problem? ;)
> 


-- 
-------------------------------------------------------------------------
David Rohleder						davro na ics.muni.cz
Institute of Computer Science, Masaryk University
Brno, Czech Republic
-------------------------------------------------------------------------


Další informace o konferenci Linux