Thursday, January 31, 2008

DPS912 Lecture 5

Review Unix Sockets

High level calls (putchar getc etc) need a FILE*, read/write are low level and need a file descriptor
File pointers are different from a file descriptor.

Internet Sockets

Sockets which can communicate over networks. Does not use file names instead...
instead use : IPaddress Port Number

Interesting way in which an ipaddress is made eg 1.2.3.4 =
1 * 256^3 + 2 * 256^2 + 3 *256 + 4
Use AF_INET

Network Byte Order
- a standard order in which bytes are put onto the network. May or maynot be the same as your machine order (big-endian, little-endian). There are conversion functions to convert from host byte order to network byte order
- htonl : host to network long
- htons
- ntohl
- ntohs

Network Addressing
convert ascii ipaddress to IP address in network byte order
- inet_pton("127.0.0.1") (also inet_addr or inet_aton)

real usage
inet_pton( AF_INET, "127.0.0.1", &address.sin_addr);


Using hostnames
x = gethostbyname("zenit.senecac.on.ca");
getaddrinfo("zenit.senecac.on.ca", NULL, NULL, &addrinfo_var);

use setsockopt to set the SO_REUSEADDR option so that you can reuse a socket right away after closing.

IO Multiplexing

use select to wait for activity on multiple file descriptors
select simply checks to see if a read(or whatever) will be non-blocking
Manipulate File Descriptor sets via
FD_ZERO - initialize a set (an fd_set structure)
FD_SET - put a file descriptor into the set
FD_CLR - remove an fd from the set
FD_ISSET - check to see if a filedescriptor is now unblocking

No comments: