DOC PREVIEW
NU EECS 340 - Introduction to Sockets

This preview shows page 1-2-3-4-5-6 out of 17 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 17 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 17 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 17 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 17 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 17 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 17 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 17 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

Introduction to SocketsPowerPoint PresentationDefinitionFunctionsSlide 5Slide 6Slide 7Client – high level viewSlide 9Slide 10Slide 11accepting a client connection (TCP)Sending / Receiving DataSlide 14Dealing with blocking callsDealing with blocking (cont..)select function callIntroduction to SocketsAshish GuptaTA , Intro to NetworkingJan 2004Why do we need sockets?Provides an abstraction for interprocess communication•The services provided (often by the operating system) that provide the interface between application and protocol software.ApplicationApplicationNetwork APINetwork APIProtocol AProtocol AProtocol BProtocol BProtocol CProtocol CDefinitionFunctions–Define an “end- point” for communication–Initiate and accept a connection–Send and receive data–Terminate a connection gracefullyExamples File transfer apps (FTP), Web browsers(HTTP), Email (SMTP/ POP3), etc…Types of Sockets•Two different types of sockets :–stream vs. datagram•Stream socket :( a. k. a. connection- oriented socket)–It provides reliable, connected networking service–Error free; no out- of- order packets (uses TCP)–applications: telnet/ ssh, http, …•Datagram socket :( a. k. a. connectionless socket)–It provides unreliable, best- effort networking service–Packets may be lost; may arrive out of order (uses UDP)–applications: streaming audio/ video (realplayer), …AddressingClientServerAddresses, Ports and Sockets•Like apartments and mailboxes–You are the application–Your apartment building address is the address–Your mailbox is the port–The post-office is the network–The socket is the key that gives you access to the right mailboxClient – high level viewCreate a socketSetup the server addressConnect to the serverRead/write dataShutdown connectionint connect_ socket( char *hostname, int port) {int sock;struct sockaddr_in sin;struct hostent *host;sock = socket( AF_ INET, SOCK_ STREAM, 0);if (sock == -1)return sock;host = gethostbyname( hostname);if (host == NULL) {close( sock);return -1;}memset (& sin, 0, sizeof( sin));sin. sin_ family = AF_ INET;sin. sin_ port = htons( port);sin. sin_ addr. s_ addr = *( unsigned long *) host-> h_ addr_ list[ 0];if (connect( sock, (struct sockaddr *) &sin, sizeof( sin)) != 0) {close (sock);return -1;}return sock;}Resolve the hoststruct hostent *gethostbyname( const char *hostname);/*Return nonnull pointer if OK, NULL on error */Setup up the structunit16_t htons(unit16_t host16bitvaule)/*Change the port number from host byte order to network byte order */Connectconnect(int socketfd, const struct sockaddr * servaddr, socket_t addrlen)/*Perform the TCP three way handshaking*/Hostent structurestruct hostent{ char * h_name /*official name of host*/ char ** h_aliases; /* pointer ot array of\ pointers to alias name*/ int h_addrtype /* host address type*/ int h_length /* length of address */ char ** h_addr_list /*prt to array of ptrs with \ IPv4 or IPv6 address*/}Ipv4 socket address structurestruct socketaddr_in{ uint8_t sin_len; /*length of the structure (16)*/ sa_falimily_t sin_family /* AF_INT*/ in_port_t sin_port /* 16 bit TCP or UDP port number*/ struct in_addr sin_addr /* 32 bit Ipv4 address */ char sin_zero(8)/* unused*/}OMake the socketSocket(int family , int type, in t protocol); return nonnegative value for OK, -1 for errorServer – high level viewCreate a socketBind the socketListen for connectionsAccept new client connectionsRead/write to client connectionsShutdown connectionListening on a port (TCP)int make_ listen_ socket( int port) {struct sockaddr_ in sin;int sock;sock = socket( AF_ INET, SOCK_ STREAM, 0);if (sock < 0)return -1;memset(& sin, 0, sizeof( sin));sin. sin_ family = AF_ INET;sin. sin_ addr. s_ addr = htonl( INADDR_ ANY);sin. sin_ port = htons( port);if (bind( sock, (struct sockaddr *) &sin, sizeof( sin)) < 0)return -1;return sock;}Make the socketSetup up the structBindbind(int sockfd, const struct sockaddr * myaddr, socklen_t addrlen);/* return 0 if OK, -1 on errorassigns a local protocol adress to a socket*/accepting a client connection (TCP)int get_ client_ socket( int listen_ socket) {struct sockaddr_ in sin;int sock;int sin_ len;memset(& sin, 0, sizeof( sin));sin_ len = sizeof( sin);sock = accept( listen_ socket, (struct sockaddr *) &sin, &sin_ len);return sock;}Setup up the structAccept the client connectionaccept(int sockefd, struct sockaddr * claddr, socklen_t * addrlen)/* return nonnegative descriptor if OK, -1 on error return the next completed connection from the front of the completed connection queue. if the queue is empty, the process is put to sleep(assuming blocking socket)*/Sending / Receiving Data •With a connection (SOCK_STREAM):–int count = send(sock, &buf, len, flags);•count: # bytes transmitted (-1 if error)•buf: char[], buffer to be transmitted•len: integer, length of buffer (in bytes) to transmit•flags: integer, special options, usually just 0–int count = recv(sock, &buf, len, flags);•count: # bytes received (-1 if error)•buf: void[], stores received bytes•len: # bytes received•flags: integer, special options, usually just 0–Calls are blocking [returns only after data is sent (to socket buf) / received]socket()bind()listen()accept()read()write()read()close()Socket()connect()write()read()close()TCP ClientTCP ServerWell-known portblocks until connection from clientprocess requestConnection establishmentData(request)Data(reply)End-of-file notificationDealing with blocking calls•Many functions block –accept(), connect(), –All recv()•For simple programs this is fine•What about complex connection routines–Multiple connections–Simultaneous sends and receives–Simultaneously doing non-networking processingDealing with blocking (cont..)•Options–Create multi-process or multi-threaded code–Turn off blocking feature (fcntl() system call)–Use the select() function•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–Therefore, can identify sockets that are “ready for use”: calls involving that socket will return immediatelyselect function call•int status = select()–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


View Full Document

NU EECS 340 - Introduction to Sockets

Download Introduction to Sockets
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Introduction to Sockets and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Introduction to Sockets 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?