www.pudn.com > FindMail.zip > udp.cpp
#include "stdafx.h"
#include "udp.h"
#include "util.h"
int udp_wsa_ok =0;
int udp_init()
{
WSAData wsa;
//sd_bind =sd_connect =sd_accept =-1;
if(WSAStartup(MAKEWORD(1, 1), &wsa) !=0)
return -1;
udp_wsa_ok =1;
return 0;
}
int udp_exit()
{
if(udp_wsa_ok) WSACleanup();
return 0;
}
int udp_connect(char *host, int port)
{
struct hostent *hp;
struct sockaddr_in addr;
char temp[200], temp1[200];
unsigned long ul;
int sd =-1, ret;
sd =-1;
if((sd =(int)socket(PF_INET, SOCK_DGRAM, 0)) <0)
{
sprintf(temp, "socket failed! err:%s", GetErrString(temp1, WSAGetLastError()));
return -1;
}
memset(&addr, 0, sizeof(addr));
ul =inet_addr(host);
if(ul ==0xffffffff)
{
if((hp =gethostbyname(host)) ==NULL)
{
sprintf(temp, "gethostbyname and inet_addr failed! errno:%d", WSAGetLastError());
closesocket(sd);
return -1;
}
memcpy(&addr.sin_addr, hp->h_addr, hp->h_length);
}
else addr.sin_addr.s_addr=ul;
addr.sin_family =AF_INET;
addr.sin_port =htons((unsigned short)port);
if((ret =connect(sd, (struct sockaddr *)&addr, sizeof(addr))) !=0)
{
closesocket(sd);
return -1;
}
return sd;
}
int udp_send(int sd, char *buf, int len)
{
return send(sd, buf, len, 0);
}
int udp_recv(int sd, char *buf, int len, int timeout)
{
return recv(sd, buf, len, 0);
}
int udp_sendto(int sd, char *host, int port, char *buf, int len)
{
struct hostent *hp;
struct sockaddr_in addr;
char temp[200];
memset(&addr, 0, sizeof(addr));
unsigned long ul =inet_addr(host);
if(ul ==0xffffffff)
{
if((hp =gethostbyname(host)) ==NULL)
{
sprintf(temp, "gethostbyname and inet_addr failed! errno:%d", WSAGetLastError());
return -1;
}
memcpy(&addr.sin_addr, hp->h_addr, hp->h_length);
}
else addr.sin_addr.s_addr=ul;
addr.sin_family =AF_INET;
addr.sin_port =htons((unsigned short)port);
return sendto(sd, buf, len, 0, (sockaddr *)&addr, sizeof(sockaddr));
}
int udp_recvfrom(int sd, char *host, int port, char *buf, int len, int timeout)
{
struct hostent *hp;
struct sockaddr_in addr;
char temp[200];
memset(&addr, 0, sizeof(addr));
unsigned long ul =inet_addr(host);
if(ul ==0xffffffff)
{
if((hp =gethostbyname(host)) ==NULL)
{
sprintf(temp, "gethostbyname and inet_addr failed! errno:%d", WSAGetLastError());
return -1;
}
memcpy(&addr.sin_addr, hp->h_addr, hp->h_length);
}
else addr.sin_addr.s_addr=ul;
addr.sin_family =AF_INET;
addr.sin_port =htons((unsigned short)port);
int len2 =sizeof(sockaddr);
return recvfrom(sd, buf, len, 0, (sockaddr *)&addr, &len2);
}
int udp_close(int sd)
{
return closesocket(sd);
}