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