Client/Server Computing Foundations: Sockets
Tom Kelliher, CS 318
Mar. 27, 2000
Midterm in one week.
Read 25.1--25.7 (C version of the Perl client/server application.)
Read 24.8.
Read Chapter 29.
Client/server interactions between a web server and a browser.
- Client/Server dialogue
- Small client/server example: runs, code walk-through.
- Perl socket functions.
Continuation of sockets programming, web server project.

- Examples interacting with each other.
- Server interacting with telnet.
- Client interacting with daytime.
server.pl. Note the following:
- Taint checking is good, but optional.
- The SIGTERM handler.
- Untainting a variable: regular expressions.
-
$!: errno.
client.pl. Note:
- Length of the receive buffer.
- Getting a port number by name,
/etc/services.
- Message fragmentation.
Check return values!!!
Create a socket.
socket(SOCKETHANDLE, PF_INET, SOCK_STREAM, getprotobyname("tcp"));
setsockopt(SOCKETHANDLE, SOL_SOCKET, SO_REUSEADDR, 1);
Parameters:
- Socket handle.
- The other parameters should be used as-is.
- Returns success/failure.
Bind a socket to a port and IP address.
bind(SOCKETHANDLE, sockaddr_in($sport, INADDR_ANY));
Parameters:
- Socket handle.
- Port number.
- Bind to any available IP address on host.
- Returns success/failure.
Set length of socket's request queue.
listen(SOCKETHANDLE, SOMAXCONN)
Parameters:
- Socket handle.
- 64(?) queued connections.
Wait for and accept a connection request from a client.
accept(CONNECTION, SOCKETHANDLE)
Parameters:
- Socket handle used for communicating.
- Socket handle used for listening.
- Returns packed address of client. Use
sockaddr_in() to
decode.
Send a message through a socket.
send(CONNECTION, $message, 0);
Parameters:
- Socket handle used for communicating.
- Message. Keep under 1,400 bytes.
- Zero.
- Returns the number of bytes sent or the undefined value on an error.
Close a socket.
close(CONNECTION);
Parameters:
- Socket handle used for communicating.
Connect to a server.
connect(SHANDLE, sockaddr($sport, $sipaddr));
Parameters:
- Socket handle.
- Server, port, IP address.
- Returns success/failure.
Receive a (portion of a) message.
recv(SHANDLE, $message, $length, 0);
Parameters:
- Socket handle.
- Message buffer.
- Maximum number of bytes to receive.
- Zero.
- Returns success/failure.
Re-walk the client/server code at this point.
Thomas P. Kelliher
Mon Mar 27 12:19:25 EST 2000
Tom Kelliher