I'm about to use a char device for a kind of distributed processing, so I've coded the open function as follows. The problem is that soaccept returns 0 without populating the raddr. I've checked netstat, everything seems to be fine, the socket is created, bound and the state is LISTENING. Even the remote is connection is ESTABLISHED. But, it cannot receive anything. it says that socket (sock variable) is not connected.
int open(struct cdev *dev, int flag, int otyp, struct thread *td) { uprintf("in open...\n"); int error = -1; socktd = td; error = socreate(AF_INET, &sock, SOCK_STREAM, IPPROTO_TCP, td->td_proc->p_ucred, socktd); if(error != 0) return error; sockaddr.sin_len = sizeof(struct sockaddr_in); sockaddr.sin_family = AF_INET; sockaddr.sin_port = htons(1234); sockaddr.sin_addr.s_addr = INADDR_ANY; error = sobind(sock, (struct sockaddr *)&sockaddr, socktd); uprintf("sobind error = %d\n", error); error = solisten(sock, 5, socktd); uprintf("solisten error = %d\n", error); error = soaccept(sock, (struct sockaddr **)&raddr); uprintf("soaccept error = %d, ip=%s\n", error, inet_ntoa(raddr->sin_addr)); uprintf("out open...\n"); return(error); } int read(struct cdev *dev, struct uio *uio, int ioflag) { int error = 0; error = soreceive(sock, (struct sockaddr **)&raddr, uio, NULL, NULL, NULL); return(error); } _______________________________________________ freebsd-net@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-net To unsubscribe, send any mail to "freebsd-net-unsubscr...@freebsd.org"