dimanche 27 avril 2014

Sending UDP socket in linux - C language


Vote count:

0




I know that this is obviously dumb question and I know that there are many tutorials and ready-to-go examples but I must missing something. I am trying to send for example text (char *) via UDP socket to other machine in local network. So far I tried some tutorials like http://ift.tt/1eyqWub and so on but I always get error in bind() function with errno "Cannot assign requested address".


I just have some data in char array and I want to push them via network to another host. Could someone please point me to the right direction? Do I need socket server or client? Do I need to bind the socket to some interface?


This is my playground:



#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <fcntl.h>
#include <errno.h>

int handle;

int init_socket()
{
handle = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

if (handle <= 0)
{
printf("failed to create socket\n");
return 1;
}

printf("sockets successfully initialized\n");

return 0;
}

int main ()
{
unsigned short port = 30000;
char * data = "hovno";

init_socket();

struct sockaddr_in address;

memset((char *) &address, 0, sizeof(address));

address.sin_family = AF_INET;
address.sin_addr.s_addr = inet_addr("192.168.11.129"); // this is address of host which I want to send the socket
address.sin_port = htons(port);


printf("handle: %d\n", handle); // prints number greater than 0 so I assume handle is initialized properly

if (bind(handle, (const struct sockaddr*) &address, sizeof(struct sockaddr_in)) < 0)
{
printf("failed to bind socket (%s)\n", strerror(errno)); // Cannot assign requested address
return 1;
}

int nonBlocking = 1;
if (fcntl(handle, F_SETFL, O_NONBLOCK, nonBlocking) == -1)
{
printf("failed to set non-blocking\n");
return 2;
}

int sent_bytes = sendto(handle, data, strlen(data), 0, (const struct sockaddr*) &address, sizeof(struct sockaddr_in));

if (sent_bytes != strlen(data))
{
printf("failed to send packet\n");
return 3;
}

return 0;
}


Thanks in advance for your help.



asked 55 secs ago






Aucun commentaire:

Enregistrer un commentaire