16.05.2015 Views

Working with the Unix OS

Working with the Unix OS

Working with the Unix OS

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Interprocess Communication<br />

Server<br />

socket()<br />

|<br />

bind()<br />

|<br />

recvfrom()<br />

| Client<br />

blocks until connection from client<br />

socket()<br />

| |<br />

| connect()<br />

| |<br />

process request| |<br />

| |<br />

sendto() recvfrom()<br />

! Socket system calls connectionless protocol<br />

<strong>Unix</strong> Domain Protocols<br />

Provide a feature that is not currently provided by any o<strong>the</strong>r protocol family: <strong>the</strong> ability to pass access rights from<br />

one process to ano<strong>the</strong>r.<br />

The name space used by unix domain protocols consists of pathnames, for example:<br />

{ unixstr, 0 /tmp/log.1528, 0, /dev/logfile }<br />

unixstr unix stream connection oriented<br />

0 local address<br />

/tmp/log.1528 local process<br />

0 remote address<br />

0 /dev/logfile remote process<br />

Socket Addresses<br />

/* defined in */<br />

struct sockaddr {<br />

u_short sa_family; /* address family: AF_xxx */<br />

char sa_data[14];} /* protocol specific addr */<br />

/* defined in */<br />

struct in_addr {<br />

u_long s_addr; /* 32-bit netid/hostid */<br />

}; /* network byte ordered */<br />

struct sockaddr_in {<br />

short sin_family; /* AF_INET * /<br />

u_short sin-port; /* 16-bit port number */<br />

struct in_addr sin_addr; /* netid/hostid */<br />

char sin_zero[8]; /* unused */<br />

};<br />

/* defined in */<br />

struct sockaddr_un {<br />

short sun_family; /* AF_UNIX */<br />

char sun_path[108]; /* pathname */<br />

};<br />

Socket address structures struct sockaddr_in struct sockaddr_un<br />

family<br />

family<br />

2 byte port<br />

4 byte net ID, host ID<br />

pathname<br />

(unused)<br />

(upto 108 bytes)<br />

struct sockaddr_in serv_addr;<br />

165

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!