You are on page 1of 3

My_addr.sin_addr = inet_addr(“10.0.0.1”); // returns -1 on error, same as inet_addr(“255.255.255.

255”)

OR

Inet_aton(“10.0.0.1”, &(my_addr.sin_addr));

OR

Struct hostent * gethosbyname(char * name)

Example

Unsigned long resolve_name(char * name)

Struct hostent * host;

If ((host = gethostbyname(name)) == NULL)

Fatal_error(“gethostbyname() failed”);

Return * ((unsigned long*) host  addr_list[0]);

My_addr.sin_addr.s_addr = resolve_name(“cis.stvincent.edu”);

Socket Options

Getsockopt(), setsockopt()

//prevents annoying warning “address already in use”

Int on = 1;

Setsockopt (sock, SOL_SOCKET, SO_REUSEADR, &on, sizeof(on));

Changes on windows

#include…

#include <winsock.h>


Int main()

WSADATA WSAData;

If (WSAStartup (MAKEWORD(1,1), & WSAData) !=0)

Fatal_error(“WSAStartup failed”);

….

Closesocket(sock); //not close(sock)

WSACleanup();

Return 0;

AND Link in wsock32.lib

Setting up a server socket

1. Create server socket


2. Bind
3. Listen
4. Accept connections(blocks program while waiting)
a. Returns new socket that
i. Receive
ii. Send
iii. Close
5. Close

Processing connections

1. Multiple process( fork() or exec())

For(;;)

Sock = accept(…);

Fork(handlerequest(sock)); // or exec(processrequest,…)
}

2. Use threads (see pthreads library)

Int select(int maxDescPlus1, fd_set * readDescs, fd_set * writeDescs, fd_set * exceptDescs, struct
timeval * timeout);

Int FD_ZERO( fd_set * descriptors);

Int FD_CLR( int descriptor, fd_set * descriptros);

Int FD_SET( int descriptor, fd_set * descriptors);

Int FD_ISSET(int descriptor, fd_set * descriptors);

Define STDIN 0

Int main(void)

Fd_set readfds;

FD_ZERO(& readfds);

FD_SET(STDIN, &readfds);

Select(STDIN + 1, & readfds, NULL, NULL,NULL);

If(FD_ISSET(STDIN, &readfds))

Cout << “a key was processed!” << endl;

Return 0;

You might also like