UDP checksum problem



Hi !
For some strange reason I cant get correct checksums when I am sending
packets through simple UDP socket.Can anyone tell me what I am doing
wrong ?

The code is following :

int sendUDP(char* buf,int size,char* ip_str,char* port_str)
{

int sockfd, portno, ip;
struct sockaddr_in serv_addr;
sockfd = socket(PF_INET, SOCK_DGRAM,0);
if (sockfd < 0)
error("ERROR opening socket");
memset((void*)&serv_addr,0,sizeof(struct sockaddr_in));
serv_addr.sin_family=PF_INET;
portno=atoi(port_str);
serv_addr.sin_port = htons(portno);
serv_addr.sin_addr.s_addr=inet_addr(ip_str);
if(serv_addr.sin_addr.s_addr==-1)
error("wrong ip");
int len=sendto(sockfd,buf,size,0,(struct
sockaddr*)&serv_addr,sizeof(serv_addr));
close(sockfd);

return len;
}

.