Download presentation
Presentation is loading. Please wait.
Published byRudolf Mason Modified over 9 years ago
1
CS345 Operating Systems Φροντιστήριο Άσκησης 2
2
Inter-process communication Exchange data among processes Methods –Signal –Pipe –Sockets
3
Echo server Sits and waits on client connections Echoing messages Version 1: same machine –Named pipes Version 2: different machines –Sockets
4
Pipes Chain of processes arranged so that the output of each process is the input of the next
5
Named pipes Special file that is used to transfer data between unrelated processes Client writes to it and echo server reads from it
6
The mkfifo() system call Creates a named pipe –with name pathname –mode specifies the permissions #include int mkfifo(const char *pathname, mode_t mode);
7
How do I use a named pipe? Open it like a normal file Use read() and write() Close it like a normal file The unlink() system call deletes a name and the file it refers to #include ssize_t read(int fd, void *buf, size_t count); ssize_t write(int fd, const void *buf, size_t count);
8
Sockets endpoint of communication link between two programs running on the network inter-process communication flow across a computer network
9
Socket Types Stream sockets, also known as connection- oriented sockets, provides sequenced, reliable, two-way, connection-based byte streams. Datagram sockets, also known as connectionless sockets.
10
Socket Functions (1/5) create an endpoint for communication –The domain argument specifies a communication domain (“AF_INET”, “AF_UNIX”, etc) –type specifies the communication semantics (“SOCK_STREAM”, “SOCK_DGRAM”, etc) –protocol set to 0 #include int socket(int domain, int type, int protocol);
11
Socket Functions (2/5) assigns the address specified to by addr to the socket referred to by the file descriptor sockfd addrlen specifies the size, in bytes, of the address structure pointed to by addr ( sizeof(struct sockaddr_in) ) #include int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen); struct sockaddr_in { sa_family_t sin_family ; //= AF_INET in_port_t sin_port ; //into network byte order struct in_addr sin_addr ;}; struct in_addr { u_int32_t s_addr;};
12
Socket Functions (3/5) Listen for connections on a socket –sockfd: file descriptor that refers to a socket –backlog: number of allowed connections #include int listen(int sockfd, int backlog);
13
Socket Functions (4/5) Accept a connection on a socket –Arguments same as bind function –addr: client’s information #include int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
14
Socket Functions (5/5) Initiate a connection on a socket –Called by the client #include int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
15
send/recv Functions The message is found in buf and has length len flag: 0, by default: #include ssize_t send(int sockfd, const void *buf, size_t len, int flags); ssize_t recv(int sockfd, void *buf, size_t len, int flags);
16
Useful functions Convert multi-byte integer types from host byte order to network byte order. Convert IPv4 and IPv6 addresses from text to binary form e.g.: inet_pton(AF_INET, server_ip, &addr.sin_addr) Return a structure with information for the host name (can be an IP address) #include Uint16_t htons(uint16_t hostshort); #include int inet_pton(int af, const char *src, void *dst); #include struct hostent *gethostbyname(const char *name);
17
Server example struct sockaddr_in server_addr, client_addr; sock = socket(AF_INET, SOCK_STREAM, 0); server_addr = … bind(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); listen(sock, 5); while(1){ connected = accept(sock, (struct sockaddr *)&client_addr,&(sizeof(struct sockaddr_in))); //recv and send operations } close(sock);
18
Client example struct sockaddr_in server_addr; sock = socket(AF_INET, SOCK_STREAM, 0); server_addr = … connect(sock, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)); while(1){ //send and recv operations } close(sock);
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.