опубликован 13-08-2001 13:33 MSK
int lenret;
struct sockaddr_in s_address;
if(sock_out != INVALID_SOCKET) {
memset(&s_address,0,sizeof(SOCKADDR_IN));
s_address.sin_family = AF_INET;
s_address.sin_addr.s_addr = inet_addr(szAddr);
s_address.sin_port = htons((WORD)nPort);
}lenret=sendto(sock_out,(char *)buf,nDataLen+sizeof(UDPHDR),0,(SOCKADDR *)&(s_address),sizeof(SOCKADDR_IN));
free(buf);
при этом сокет создаётся следующим образом:
BOOL CreateOutgoingSocket(void)
{
struct sockaddr_in srv_address;
int namelen;
sock_out = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sock_out != INVALID_SOCKET) {
memset(&srv_address,0,sizeof(SOCKADDR_IN));
srv_address.sin_addr.S_un.S_addr=INADDR_ANY;
srv_address.sin_family = AF_INET;
srv_address.sin_port = 0;
}
if(bind(sock_out, (SOCKADDR *) &srv_address, sizeof(SOCKADDR_IN)) == SOCKET_ERROR) {
closesocket(sock_out);
return FALSE;
} else {
namelen=sizeof(SOCKADDR_IN);
getsockname(sock_out,(SOCKADDR *)&srv_address,&namelen);
return TRUE;
}
}
тобишь строчка:
srv_address.sin_port = 0;
означает, чтосистема присобачит сокет на первый же попавшийся свободный порт.
а строчки:
s_address.sin_addr.s_addr = inet_addr(szAddr);
s_address.sin_port = htons((WORD)nPort);
указывают адрес и порт, на который будет отправлен пакет.
переменные объявлены как
int nPort;
const char *szAddr;