SLIDE 4 Page 4
Socket Programming Cliches
– Net work is big-endian, host may be big- or lit t le-endian – Funct ions work on 16-bit (short ) and 32-bit (long) values – ht ons() / ht onl() : convert host byt e order t o net work byt e order – nt ohs() / nt ohl(): convert net work byt e order t o host byt e order – Use t hese t o convert net work addresses, port s, …
– You will see a lot of ‘st ruct ure cast s’
struct sockaddr_in serveraddr; / * f ill in serveraddr with an address */ … / * Connect takes (struct sockaddr * ) as its second argument * / connect(clientf d, (struct sockaddr * ) &serveraddr, sizeof (serveraddr)); …
Socket primit ives
- SOCKET: int socket(int domain, int type, int
protocol);
– domain := AF_I NET (I Pv4 prot ocol) – t ype := (SOCK_DGRAM or SOCK_STREAM ) – prot ocol := 0 (I PPROTO_UDP or I PPROTO_TCP) – ret urned: socket descript or (sockf d), -1 is an error
- BI ND: int bind(int sockf d, struct sockaddr
*my_addr, int addrlen);
– sockf d - socket descript or (ret urned f rom socket ()) – my_addr: socket address, st ruct sockaddr_in is used – addrlen := sizeof (st ruct sockaddr)
struct sockaddr_in { unsigned short sin_family; /* address family (always AF_INET) */ unsigned short sin_port; /* port num in network byte order */ struct in_addr sin_addr; /* IP addr in network byte order */ unsigned char sin_zero[8]; /* pad to sizeof(struct sockaddr) */ };
- LI STEN: int listen(int sockf d, int backlog);
– backlog: how many connect ions we want t o queue
- ACCEPT: int accept(int sockf d, void *addr, int * addrlen);
– addr: here t he socket -address of t he caller will be writ t en – ret urned: a new socket descript or (f or t he t emporal socket )
- CONNECT: int connect(int sockf d, struct sockaddr
*serv_addr, int addrlen); / / used by TCP client
– paramet ers are same as f or bind()
- SEND: int send(int sockf d, const void *msg, int len, int
f lags);
– msg: message you want t o send – len: lengt h of t he message – f lags := 0 – ret urned: t he number of byt es act ually sent
- RECEI VE: int recv(int sockf d, void *buf , int len, unsigned int
f lags);
– buf : buf f er t o receive t he message – len: lengt h of t he buf f er (“don’t give me more!”) – f lags := 0 – ret urned: t he number of byt es received