[networking] socket problem in bind() and recvfrom()
hi,
i have this piece of code:
Code:
/* compilation options: reset; gcc -g -Wall -ansi -pedantic testes.c -o tt */
#define _POSIX_C_SOURCE 200112L
#define _XOPEN_SOURCE 600
#define _BSD_SOURCE /*|| _SVID_SOURCE*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <limits.h>
#include <errno.h>
#include <strings.h>
#define MAX_READ 100
int main(int argc, char **argv)
{
struct sockaddr_in serv_addr;
int sockfd, slen=sizeof(serv_addr);
char command_string[] ="REG gu.sl;192.168.1.32;61000;60000";
char *saport="58000";
char *IPserver="193.136.138.142";
socklen_t len_inet;
int z;
int n;
int addrlen;
char receive[50];
sockfd = socket(AF_INET, SOCK_DGRAM, 0);
if ( sockfd == -1 )
{
printf("UDP socket() call failed to create");
}
else
{
printf("UDP socket created ping is %s \n", saport);
}
memset((void*)&serv_addr,(int)'\0', sizeof(serv_addr));
/*bzero(&serv_addr, sizeof(serv_addr));*/
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(atoi(saport));
if (inet_aton(IPserver, &serv_addr.sin_addr)==0)
{
fprintf(stderr, "inet_aton() failed\n");
exit(1);
}
len_inet = sizeof(serv_addr);
z = bind(sockfd, (struct sockaddr *)&serv_addr, len_inet);
if ( z == -1)
{
printf ("UDP ..Bind socket bind() failed\n");
exit(EXIT_FAILURE);
}
else
{
printf("UDP socket bound to port \n");
}
printf("command_string=%s antes do sendto func\n",command_string);
n = sendto(sockfd, command_string, strlen(command_string), 0, (struct sockaddr *)&serv_addr, len_inet);/* ver o zero dos flags, meter uma macro*/
if(n==-1) exit(1);
/*memset(command_string, '0', MAX_READ );*/
/* addrlen=sizeof(res);*/
memset(command_string,'\0', sizeof(command_string));
printf("command_string=%s ... func\n",command_string);
n=recvfrom(sockfd,receive/*command_string*/, 50 /*sizeof(command_string)*/, 0, (struct sockaddr *)&serv_addr, &len_inet);/*ver se posso meter &(sizeof(res) em vez de addrlen)*/
if(n==-1)exit(1);
printf("command_string=%s ...\n",command_string);
printf("receive=%s ...\n",receive); /*output must be : DNS gu.sl;192.168.1.32;60000 */
return 0;
}
i am not able to bind it nor to receive anything in the recvfrom and i dont know why. so is smb able to help me?
i thank you in advance for the help