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

Loading in 2 Seconds...

play fullscreen
1 / 16

UNIX Socket Programming CS 6378 - PowerPoint PPT Presentation


  • 622 Views
  • Uploaded on

UNIX Socket Programming CS 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 Socket API

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'UNIX Socket Programming CS 6378' - lotus


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.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
unix socket programming cs 6378

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

socket api
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

structs and data handling
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 };

convert the natives
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"
ip addresses
IP Addresses
  • socket01.utdallas.edu 129.110.43.11
  • sol2.utdallas.edu 129.110.34.2 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(“129.110.43.11”) // 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) ;

useful unix commands
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
system calls
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);
slide9
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

client server programming
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 ●

slide11

Status of Client-Server after fork returns

Server( Parent)

listenfd ●

connfd ●

Client

● connect()

Server ( Child)

listenfd●

connfd ●

slide12

Status of Client Server after parent and Child close appropriate sockets

Server ( Parent)

listenfd ●

Client

● connect()

Server(Client)

connfd ●

slide13

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

threads
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
thread synchronization
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/pthreads.cc

references
References
  • UNIX Network Programming , Networking APIs: Sockets and XTI : W Richard Stevens
  • Beej’s Guide to Network Programming

www.ecst.csuchico.edu/~beej/guide/net/

  • Dr Syrotiuk’s web page with sample networking programs

www.utdallas.edu/~syrotiuk/cs6378/work.html