When compiling and running the following code I get the error shown below.
$ g++ -g -o client client_udp.cpp
$ client 172.16.7.173 9999 4096
VMCIsockAddressFamily=34
Attempt to send 4096 bytes.
sendto() error: Invalid argument.
Note the address family of 34 in /usr/include/linux/socket.h conflicts with AF_MAX.
This was run on a Pentium 4 machine running Fedora 10 with VMPlayer 2.5.2 (build 156735)
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include </usr/lib/vmware/include/vmci/vmci_sockets.h>
#define MAX_LENGTH_UDP 65536
int
main(int argc, char *argv[])
{
int sockfd, n, port, packetSize;
unsigned clientLength;
unsigned sendlength;
char bufferMAX_LENGTH_UDP;
if (argc != 4) {
printf("Usage: %s server port packetsize\n",argv[0]);
exit(-1);
}
port = atoi(argv[2]);
sendlength = atoi(argv[3]);
int VMCIsockAddressFamily = VMCISock_GetAFValue();
sockfd = socket(VMCIsockAddressFamily, SOCK_DGRAM, 0);
printf("VMCIsockAddressFamily=%d\n",VMCIsockAddressFamily);
if (sockfd < 0) {
printf("Socket error: VMCIsockAddressFamily=%d %s\n",VMCIsockAddressFamily,strerror(errno));
exit(-1);
}
struct sockaddr_vm server;
clientLength = sizeof (struct sockaddr_vm) ;
memset(&server,0,sizeof(server));
server.svm_family = VMCIsockAddressFamily;
server.svm_cid = 2;
server.svm_port = 9999;
fprintf(stdout, "Attempt to send %d bytes.\n", sendlength);
if (( n = sendto(sockfd, buffer, sendlength, 0, (struct sockaddr *) & server, clientLength)) < 0) {
printf("sendto() error: %s\n",strerror(errno));
}
return 0;
}