first zero out your sockaddr_in structure before using it. bzero(&dp, sizeof(dp));
and then be sure and set the len field in sockaddr_in struct; dp.sin_len = sizeof(dp); also... get rid of the htonl(bind_to_addr) because inet_addr puts the address in network byte order. i compiled with those changes and the bind succeeded. my guess is the sockaddr_in struct had garbage in the fields that werent initialized... causing an error somewhere along the way. -matt ----- Original Message ----- From: "Chris Given" <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Sent: Tuesday, July 09, 2002 4:50 PM Subject: Bind to specific address on FreeBSD > I can't figure out why this code won't bind to 127.0.0.1 on FreeBSD. I get > an error "Can't assign requested address". > > #include <stdio.h> > #include <sys/types.h> > #include <sys/time.h> > #include <time.h> > #include <sys/socket.h> > #include <netinet/in.h> > #include <netdb.h> > #include <errno.h> > #include <stdio.h> > #include <string.h> > #include <arpa/inet.h> > #include <unistd.h> > #include <stdlib.h> > > int main() { > int sock; > struct sockaddr_in dp; > unsigned long bind_to_addr = inet_addr("127.0.0.1"); > > sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); > if(sock < 0) { > printf("Error socket : %s\n", strerror(errno)); > return -1; > } > > dp.sin_family = AF_INET; > dp.sin_addr.s_addr = htonl(bind_to_addr); > dp.sin_port = htons(1234); > > if(bind(sock, (struct sockaddr*)&dp, sizeof(struct sockaddr_in))!=0) > { > printf("Bind failed : %s\n", strerror(errno)); > } else { > printf("Bind success\n"); > } > } > > To Unsubscribe: send mail to [EMAIL PROTECTED] > with "unsubscribe freebsd-net" in the body of the message > To Unsubscribe: send mail to [EMAIL PROTECTED] with "unsubscribe freebsd-net" in the body of the message