BSD Sockets em linguagem C [Artigo] - página 4
[ Hits: 114.096 ]
Funções read(), send() e exemplo cliente HTTP
Vamos usar algumas bibliotecas, são elas "sys/types.h","sys/sockets.h","netinet/in.h", "errno.h" e "netdb.h".
Outra função que vamos usar é a connect(). Seria uma função responsável pela conexão de seu socket cliente com um serviço servidor qualquer.
As headers necessárias para o uso dessa função são "sys/types.h" e "sys/socket.h".
Uma vez declaradas as headers, vamos declarar a função propriamente dita:
read() - usada para ler mensagens enviadas de um socket. Sua sintaxe é igual a da função write():
send() - usada para enviar uma mensagem para um socket.
#define MSG_OOB 0x1 /* process out-of-band data*/
#define MSG_DONTROUTE 0x4 /* bypass routing, usedirect interface */
#define MSG_DONTWAIT 0x40 /* don't block */
#define MSG_NOSIGNAL 0x2000 /* don't raise SIGPIPE */
MSG_OOB - envia mensagens Out-Of-banda (OOB) - fora de banda - para sockets que suportam esse tipo de mensagem. Esse tipo de parâmetro é o calcanhar de aquiles do Windows 95, que trava com uma mensagem OOB (famoso winnuke).
MSG_DONTROUTE - usado como debugador, para encontrar problemas.
MSG_DONTWAIT - permite operações "non-blocking".
MSG_NOSIGNAL - Ao mandar SIGPIPE em erros em sockets stream quando o outro endereço quebra a conexão.
Vou mostrar um exemplo de sockets usando protocolo HTTP com funções socket, connect, read e send. Vamos criar um simples cliente que lê uma source de uma página http, veja que antes de mandar para socket tenho que converter o HOST em IP.