Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 Netcomm 2005 - Sockets Communication Networks Recitation 2.

Similar presentations


Presentation on theme: "1 Netcomm 2005 - Sockets Communication Networks Recitation 2."— Presentation transcript:

1 1 Netcomm 2005 - Sockets Communication Networks Recitation 2

2 2 Netcomm 2005 - Sockets TCP/IP Socket Programming Cont.

3 3 Netcomm 2005 - Sockets Outline Send/Receive data Terminating a connection Dealing with blocking calls Client-server model summary

4 4 Netcomm 2005 - Sockets IP Address/Interfaces Identifies a host interface (not a host)Identifies a host interface (not a host) Interface: connection between host or router and the physical network linkInterface: connection between host or router and the physical network link Hosts may have multiple interfacesHosts may have multiple interfaces 192.18.22.13209.134.16.123

5 5 Netcomm 2005 - Sockets Sending / Receiving Data With a connection (SOCK_STREAM):With a connection (SOCK_STREAM): –int count = send(sock, &buf, len, flags); count: # bytes transmitted (-1 if error)count: # bytes transmitted (-1 if error) buf: char[], buffer to be transmittedbuf: char[], buffer to be transmitted len: integer, length of buffer (in bytes) to transmitlen: integer, length of buffer (in bytes) to transmit flags: integer, special options, usually just 0flags: integer, special options, usually just 0 –int count = recv(sock, &buf, len, flags); count: # bytes received (-1 if error)count: # bytes received (-1 if error) buf: void[], stores received bytesbuf: void[], stores received bytes len: max # bytes receivedlen: max # bytes received flags: integer, special options, usually just 0flags: integer, special options, usually just 0

6 6 Netcomm 2005 - Sockets Sending / Receiving Data (cont’d) Without a connection (SOCK_DGRAM):Without a connection (SOCK_DGRAM): –int count = sendto(sock, &buf, len, flags, &addr, addrlen); count, sock, buf, len, flags: same as sendcount, sock, buf, len, flags: same as send addr: struct sockaddr, address of the destinationaddr: struct sockaddr, address of the destination addrlen: sizeof(addr)addrlen: sizeof(addr) –int count = recvfrom(sock, &buf, len, flags, &addr, &addrlen); count, sock, buf, len, flags: same as recvcount, sock, buf, len, flags: same as recv name: struct sockaddr, address of the sourcename: struct sockaddr, address of the source namelen: sizeof(name): value/result parameternamelen: sizeof(name): value/result parameter

7 7 Netcomm 2005 - Sockets Sending/Receiving notes send( ) might send only a fraction of the buffersend( ) might send only a fraction of the buffer –Need to push the rest –See sendall( ) in Beej’s guide recv( ) might get several messages together, or a fraction of a messagerecv( ) might get several messages together, or a fraction of a message –Need to be able to identify message’s beginning and end

8 8 Netcomm 2005 - Sockets Closing connection When finished using a socket, the socket should be closed:When finished using a socket, the socket should be closed: status = close(s);status = close(s); –status: 0 if successful, -1 if error –s: the file descriptor (socket being closed) Closing a socketClosing a socket –closes a connection (for SOCK_STREAM) –frees up the port used by the socket

9 9 Netcomm 2005 - Sockets Skipping the bind() SOCK_DGRAM:SOCK_DGRAM: –if only sending, no need to bind. The OS finds a port each time the socket sends a packet –if receiving, need to bind SOCK_STREAM:SOCK_STREAM: –The OS binds a port to the client during connection setup

10 10 Netcomm 2005 - Sockets Dealing with blocking calls Many of the functions we saw block until a certain eventMany of the functions we saw block until a certain event –accept: until a connection comes in –connect: until the connection is established –recv, recvfrom: until a packet (of data) is received –send, sendto: until data is pushed into socket’s buffer For simple programs, blocking is convenientFor simple programs, blocking is convenient What about more complex programs?What about more complex programs? –multiple connections –simultaneous sends and receives –simultaneously doing non-networking processing

11 11 Netcomm 2005 - Sockets Dealing with blocking (cont’d) Options:Options: –create multi-process or multi-threaded code –turn off the blocking feature using the fcntl() file- descriptor control function –use the select() function call. What does select do?What does select do? –can be permanent blocking, time-limited blocking or non-blocking –input: a set of file-descriptors –output: info on the file-descriptors’ status –i.e., can identify sockets that are “ready for use”: calls involving that socket will return immediately

12 12 Netcomm 2005 - Sockets fcntl() function call int fcntl(int filedes, int cmd, args...);int fcntl(int filedes, int cmd, args...); –status: -1 if error –filedes: argument is an open file descriptor –cmd: specifies the operation to be performed –arg: depends upon the value of cmd fcntl(sockfd, F_SETFL, O_NONBLOCK);

13 13 Netcomm 2005 - Sockets select() function call int status = select(nfds, &readfds, &writefds, &exceptfds, &timeout);int status = select(nfds, &readfds, &writefds, &exceptfds, &timeout); –status: # of ready objects, -1 if error –nfds: 1 + largest file descriptor to check –readfds: list of descriptors to check if read-ready –writefds: list of descriptors to check if write-ready –exceptfds: list of descriptors to check if an exception is registered –timeout: time after which select returns, even if nothing ready - can be 0 or 

14 14 Netcomm 2005 - Sockets To be used with select(): Recall select uses a structure, struct fd_setRecall select uses a structure, struct fd_set –it is just a bit-vector –if bit i is set in [readfds, writefds, exceptfds], select will check if file descriptor (i.e. socket) i is ready for [reading, writing, exception] Before calling select:Before calling select: –FD_ZERO(&fdvar): clears the structure –FD_SET(i, &fdvar): to check file desc. i After calling select:After calling select: –int FD_ISSET(i, &fdvar): boolean returns TRUE iff i is “ready”

15 15 Netcomm 2005 - Sockets Read-ready Tips Standard input (STDIN) is file descriptor 0Standard input (STDIN) is file descriptor 0 Listening port is read-ready if accept won’t blockListening port is read-ready if accept won’t block Closed connections are read-ready but recv( ) returns 0 bytesClosed connections are read-ready but recv( ) returns 0 bytes Set timeout to NULL for no timeoutSet timeout to NULL for no timeout –Otherwise, see structure in Beej’s guide

16 16 Netcomm 2005 - Sockets Other useful functions bzero(char* c, int n): 0’s n bytes starting at cbzero(char* c, int n): 0’s n bytes starting at c gethostname(char *name, int len): gets the name of the current hostgethostname(char *name, int len): gets the name of the current host gethostbyname(const char *name): converts host’s name to structure containing long integergethostbyname(const char *name): converts host’s name to structure containing long integer char hostname[128]; struct hostent *he; gethostname( hostname, sizeof( hostname) ); printf( “My hostname:%s\n”, hostname ); he = gethostbyname( “www.yahoo.com” ); printf( “Address: %s\n”, inet_n_ntoa( he->h_addr ) );

17 17 Netcomm 2005 - Sockets Useful functions (cont.) gethostbyaddr(char *addr, int len, int type): converts IP hostname to structure containing long integergethostbyaddr(char *addr, int len, int type): converts IP hostname to structure containing long integer inet_aton(const char *cp, struct in_addr *inp): converts dotted-decimal char-string to binary (network order)inet_aton(const char *cp, struct in_addr *inp): converts dotted-decimal char-string to binary (network order) inet_ntoa(const struct in_addr in): converts binary to dotted-decimal stringinet_ntoa(const struct in_addr in): converts binary to dotted-decimal string struct hostent *he; struct in_addr addr; inet_aton( “66.94.230.32”, &addr ); printf( “Address: %s\n”, inet_ntoa( addr.sin_addr ) ); he = gethostbyaddr( &addr, sizeof( addr ), AF_INET ); printf( “Name: %s\n”, he->h_name );

18 18 Netcomm 2005 - Sockets UDP Client-Server socket() close() recvfrom() sendto() recvfrom() bind() socket() blocks process request data (request) data (reply) UDP Client UDP Server bind() close()

19 19 Netcomm 2005 - Sockets TCP Client-Server socket() connect() write() read() close() socket() bind() listen() accept() read() write() close() read() TCP Client TCP Server blocks until connection from client process request end-of-file notification data (reply) data (request) connection establishment 3-way handshake

20 20 Netcomm 2005 - Sockets Client-server Example request reply telnet ftp Port 20 Port 23 Port 2356 Port 3325 Client 1 Client 2Server IP=132.66.48.37 IP=132.66.48.12IP=132.66.2.1

21 21 Netcomm 2005 - Sockets Quick Unix reminder ps –efps –ef grepgrep jobsjobs killkill manman ^z + bg^z + bg |, |,


Download ppt "1 Netcomm 2005 - Sockets Communication Networks Recitation 2."

Similar presentations


Ads by Google