1 / 15

Elementary TCP Sockets

Unix Network Programming Ch # 4. Elementary TCP Sockets. Elementary Socket functions. Socket Function. To perform network I/O, first thing a process must do is call the socket function. #include <sys/socket.h> int socket(int family, int type, int protocol);

arden-young
Télécharger la présentation

Elementary TCP Sockets

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Unix Network Programming Ch # 4 Elementary TCP Sockets

  2. Elementary Socket functions

  3. Socket Function • To perform network I/O, first thing a process must do is call the socket function #include <sys/socket.h> int socket(int family, int type, int protocol); - returns: non-negative descriptor if ok, -1 on error

  4. Connect funciton • The connect function is used by a TCP client to establish a connection with a TCP server: #include <sys/socket.h> int connect(int sockfd, const struct sockaddr *servaddr, socklen_t addrlen); • Returns: 0 if ok, -1 on error • Sockfd is a socket descriptor returned by the socket function • 2nd & 3rd args are the socket address structures, must contain the address of the server to communicate with • The client does not have to call bind • The kernel chooses both an ephemeral port and the source IP address if necessary.

  5. Bind function • The bind funtion assigns a local protocol address to a socket. • With IP, combination of 32-bit (IPv4 or 128-bit for IPv6) address, along with a 16-bit TCP or UDP port number. #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen); • Servers bind to their well-known port when they start • A process can bind a specific IP address to its socket • Normally, however, a client does not bind an IP address, so that client can then respond on any interface available on the host

  6. Listen function • The listen function is called only by a TCP server and it performs 2 actions • Converts an unconnected (active) socket into a passive socket (indicates kernel should accept incoming connect requests directed to this socket • 2nd argument specifies the maximum number of connections kernel should queue for this socket #include <sys/socket.h> int listen(int sockfd, int backlog);

  7. Listen function • Normally called after both the socket and bind function, only by the server of course • Backlog - for a given listening socket, the kernel maintains 2 queues: • An incomplete connection queue, which contains an entry for each SYN that has arrived from a client for which server is awaiting completion of the TCP 3-way handshake • A completed connection queue, entry for each client with whom 3-way handshake has completed. Figure 4.7, pg. 105

  8. Accept function • Accept is called by a TCP server to return the next completed connection from the front of the completed connection queue. • If completed queue is empty, the process is put to sleep. #include <sys/socket.h> int accept(int sockfd, struct sockaddr *cliaddr, socklen_t *addrlen); • Returns: non-negative descriptor if OK, -1 on error • The cliaddr and addrlen args are used to return the protocol address of the connect peer process (the client).

  9. Fork and exec functions • We will look at building a concurrent server • Need to create a new child process to handle each incomming client request/transaction • fork function is the only way in Unix to create a new process: #include <unistd.h> pid_t fork(void); • Returns: 0 in child, process ID of child in parent, -1 on error • Called once but returns TWICE • Once in the parent process (returns child process id), • and once in the child process (return of 0)

  10. More Forking • All descriptors open in the parent before the call to fork() are shared with the child after fork returns. • Including the connected socket file description returned by accept

  11. Exec function • Only way in which an executable program file on disk can be executed in Unix is for an existing process to call one of the 6 exec functions

  12. Concurrent Servers • When a client request can take some time to service, don't want to take away time for handling connections to service a single client • Handle the communication with multiple clients at the same time • Simplest way to write a concurrent server under Unix is to fork a child process to handle each client.

  13. Concurrent Servers

  14. Close function • Close() function used to close a socket and terminate a TCP connection #include <unistd.h> int close(int sockfd); • Returns: 0 if ok, -1 on error • Default action of close with a TCP socket description is to mark the socket as closed and return tot he process immediately. • Socket descriptor is no longer usable to the app process at this point • But TCP will try to send any data that is already queued, and once flushed begin the normal TCP termination sequence.

More Related