Hi,

are there known problems with the (UDP) sendto method and/or
with ABI accessing syscalls with more arguments?

The following gives back EINVAL:

  int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

  struct sockaddr_in sock_addr;

  memset(&sock_addr, 0, sizeof(sock_addr));
  sock_addr.sin_family = AF_INET;
  sock_addr.sin_port = htons(61444);
  sock_addr.sin_addr.s_addr = inet_addr("192.168.130.27");

  r = sendto(sock, (const char *) &i, 4, 0, (struct sockaddr *)&sock_addr, 
sizeof(sock_addr));


Scattering all the data to msghdr/iovec and replacing sendto with
sendmsg works:

  struct msghdr msg;
  struct iovec iov;

  iov.iov_base = &i;
  iov.iov_len = 4;

  msg.msg_name = (struct sockaddr *)&sock_addr;
  msg.msg_namelen = sizeof(sock_addr);
  msg.msg_iov = &iov;
  msg.msg_iovlen = 1;
  msg.msg_control = 0;
  msg.msg_controllen = 0;
  msg.msg_flags = 0;

  r = sendmsg(sock, &msg, 0);


The connect() and subsequent send() works ok:

  connect(sock,(struct sockaddr *)&sock_addr, sizeof(sock_addr));
  r = send(sock, (const char *) &i, 4, 0);



I am using uClibc from uClinux 20070130 +
uClinux-dist-20070130-20070823.patch.gz and a gcc-4.2.1/binutils-2.17
based toolchain on an ARM7TDMI device. However, the device I am runnig
this on uses an older version of uClinux and the kernel (2.6.14)
was compiled with gcc 3.4.3.

Any ideas?


Thanks
-- 
                                         Stano
_______________________________________________
uClinux-dev mailing list
uClinux-dev@uclinux.org
http://mailman.uclinux.org/mailman/listinfo/uclinux-dev
This message was resent by uclinux-dev@uclinux.org
To unsubscribe see:
http://mailman.uclinux.org/mailman/options/uclinux-dev

Reply via email to