unix socket programming cs 6378 n.
Skip this Video
Loading SlideShow in 5 Seconds..
UNIX Socket Programming CS 6378 PowerPoint Presentation
Download Presentation
UNIX Socket Programming CS 6378

UNIX Socket Programming CS 6378

677 Vues Download Presentation
Télécharger la présentation

UNIX Socket Programming CS 6378

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. UNIX Socket ProgrammingCS 6378 Project Reference Book: Unix Network programming: Networking APIs: Sockets and XTI (2nd edition), Prentice Hall >> UNIX System >> Sockets >> System Calls >> TCP Client Server >> UDP Client Server >> Threads

  2. Socket API • Socket API originated with the 4.2 BSD system released in 1983 • Sockets – A way to speak to other programs using UNIX file descriptors. • A file descriptor is an integer associated with an open file.This can be a network connection • Kinds of Sockets-DARPA Internet addresses(Internet Sockets) , Unix Sockets, X.25 Sockets etc • Types of Internet Sockets • SOCK_STREAM uses TCP (Transmission Control Protocol) Connection oriented and Reliable • SOCK_DGRAM uses UDP (User Datagram Protocol) Connectionless and Unreliable

  3. Structs and Data Handling • A socket descriptor is of type int Byte ordering Most significant byte first – Network byte order (Big Endian) Least significant byte first – Host Byte order ( Little ..) Socket Structures in Network byte order struct sockaddr { unsigned short sa_family; // address family, AF_xxx char sa_data[14]; // 14 bytes of protocol address }; struct sockaddr_in { short int sin_family; // Address family unsigned short int sin_port; // Port number struct in_addr sin_addr; // Internet address unsigned char sin_zero[8]; // Same size as struct sockaddr };

  4. Convert the Natives struct in_addr { unsigned long s_addr; // 32-bit long, or 4 bytes }; If ina is of type struct sockaddr_in ina.sin_addr.s_addr references the 4-byte IP address (in Network Byte Order • htons() – Host to Network Short • htonl() -- "Host to Network Long" • ntohs() -- "Network to Host Short" • ntohl() -- "Network to Host Long"

  5. IP Addresses • • etc Other UTD machines for use socket02 – socket06 , sol1 , jupiter Please do not use apache for Network programming inet_addr() converts an IP address in numbers-and-dots notation into unsigned long ina.sin_addr.s_addr = inet_addr(“”) // Network byte order Also can use inet_aton() -- “ascii to network” int inet_aton(const char *cp,struct in_addr *inp); inet_ntoa returns a string from a struct of type in_addr inet_ntoa(ina.sin_addr) ;

  6. Useful UNIX Commands • netstat –i prints information about the interfaces • netstat –ni prints this information using numeric addresses • loop back interface is called lo and the ethernet interface is called eth0 or le0 depending on the machine • netstat –r prints the routing table • netstat | grep PORT_NO shows the state of the client socket • ifconfig eth0 – Given the interface name ifconfig gives the details for each interface --- Ethernet Addr , inet_addr , Bcast , Mask , MTU • ping IP_addr -- Sends a packet to the host specified by IP_addr and prints out the roundtrip time ( Uses ICMP messages) • traceroute IP_addr -- Shows the path from this host to the destination printing out the roundtrip time for a packet to each hop in between • Tcpdump communicates directly with Data Link layer UDP Packet fail

  7. System Calls • socket() – returns a socket descriptor • int socket(int domain, int type, int protocol); • bind() – What port I am on / what port to attach to • int bind(int sockfd, struct sockaddr *my_addr, int addrlen); • connect() – Connect to a remote host • int connect(int sockfd, struct sockaddr *serv_addr, int addrlen); • listen() – Waiting for someone to connect to my port • int listen(int sockfd, int backlog); • accept() – Get a file descriptor for a incomming connection • int accept(int sockfd, void *addr, int *addrlen); • send() and recv() – Send and receive data over a connection • int send(int sockfd, const void *msg, int len, int flags); • int recv(int sockfd, void *buf, int len, unsigned int flags);

  8. sendto() and recvfrom() – Send and receive data without connection • int sendto(int sockfd, const void *msg, int len, unsigned int flags, const struct sockaddr *to, int tolen); • int recvfrom(int sockfd, void *buf, int len, unsigned int flags, struct sockaddr *from, int *fromlen); • close() and shutdown() – Close a connection Two way / One way • getpeername() – Obtain the peer name given the socket file descriptor • gethostname() – My computer name • int sock_get_port(const struct sockaddr *sockaddr,socklen_t addrlen); Useful to get the port number given a struct of type sockaddr Readn() writen() readline() Read / Write a particular number of bytes Fork() – To start a new process with parents addr space Exec() Load a new program on callers addr space

  9. Client-Server Programming • TCP Client Server Example • Status of client-server before call to accept daytimetcpsrv1.c • Server Client ● connect() listenfd ● Status of clientserver after return from accept ● connect() listenfd ● connfd ●

  10. Status of Client-Server after fork returns Server( Parent) listenfd ● connfd ● Client ● connect() Server ( Child) listenfd● connfd ●

  11. Status of Client Server after parent and Child close appropriate sockets Server ( Parent) listenfd ● Client ● connect() Server(Client) connfd ●

  12. Socket functions of UDP Client Server Socket() Bind() Recvfrom() Socket() Sendto() Blocks until datagram received from a client recvfrom Sendto() Close() UDP Client UDP Server

  13. Threads • Threads are lightweight process which share the process instructions , global variables , open files , signal handlers and signal dispositions , current working directory and user and group Ids • Each thread has its own thread ID , set of Registers, PC and Stack pointer, stack , errno ,signal mask , priority • Basic Thread Functions : Creation and Termination • Int pthread_create(pthread_t *tid,const pthread_attr_t *attr,void *(*func)(void*), void *arg); • Int pthread_join(pthread_t tid,void **status); // Wait for a thread to terminate • pthread_t pthread_self(void); //Returns thread ID of calling thread • Int pthread_detach(pthread_t pid);//We cannot wait for it to terminate, On its termination all resources are released • Void pthread_exit(void *status); • Threads/tcpserv01.c

  14. Thread Synchronization • Shared data can be protected using mutex locks provided by the pthread library • int pthread_mutex_lock(pthread_mutex_t *mptr); • int pthread_mutex_unlock(pthread_mutex_t *mptr); • Threads/example02.c • Can use condition variables for signalling mechanism • int pthread_cond_wait(pthread_cond_t *cptr,pthread_mutex_t *mptr); • int pthread_cond_signal(pthread_cond_t *cptr); • Can also use System semaphores from <semaphores.h> See manual ~syrotiuk/

  15. References • UNIX Network Programming , Networking APIs: Sockets and XTI : W Richard Stevens • Beej’s Guide to Network Programming • Dr Syrotiuk’s web page with sample networking programs