diff --git a/driver.c b/driver.c index 8410607..4bea51d 100644 --- a/driver.c +++ b/driver.c @@ -116,7 +116,7 @@ int driver( case PRU_BIND: // KERNbind(int fd, struct sockaddr *my_addr, int addrlen, int *ERRNO) - return mbind(socknum, p1, p2, p3, p4, p5); + return mbind(e, p1, p2, p3, p4, p5); break; case PRU_CONNECT: diff --git a/maccept.c b/maccept.c index 9165dc1..72b59e5 100644 --- a/maccept.c +++ b/maccept.c @@ -50,10 +50,10 @@ static int sock_accept( DecBusy(); tmp.sin_family = AF_INET; - tmp.sin_port = port; + tmp.sin_port = dr.drDestPort; tmp.sin_addr = dr.drDestIP; - copy_address(&tmp, addr, addrlen); + copy_addr(&tmp, addr, addrlen); } *newfd = ipid; diff --git a/makefile.mk b/makefile.mk index 5012d7e..d3b88af 100644 --- a/makefile.mk +++ b/makefile.mk @@ -2,7 +2,8 @@ CFLAGS += $(DEFINES) -v -w OBJS = main.o table.o driver.o s16debug.o \ mattach.o mconnect.o mread.o mwrite.o mdetach.o \ mioctl.o mshutdown.o mgetsockopt.o msetsockopt.o \ -mgetsockname.o mselect.o maccept.o mlisten.o +mgetsockname.o mgetpeername.o mselect.o maccept.o \ +mbind.o mlisten.o TARGET = marignotti @@ -27,6 +28,8 @@ mshutdown.o: mshutdown.c marignotti.h mioctl.o: mioctl.c marignotti.h mgetsockname.o: mgetsockname.c marignotti.h mselect.o: mselect.c marignotti.h +mgetpeername.o: mgetpeername.c marignotti.h +mbind.o: mbind.c marignotti.h mlisten.o: mlisten.c marignotti.h maccept.o: maccept.c marignotti.h diff --git a/mgetpeername.c b/mgetpeername.c index 912edbb..153c15f 100644 --- a/mgetpeername.c +++ b/mgetpeername.c @@ -24,8 +24,8 @@ int mgetpeername(Entry *e, void *p1, void *p2, void *p3, void *p4, void *p5) s16_debug_printf("getpeername"); } - if (!addrlen) return EINVAL; - if (!sock_addr) return EINVAL; + if (!addrlen || !addr) return EINVAL; + if (!*addrlen) return 0; IncBusy(); TCPIPGetDestination(e->ipid, &dr); diff --git a/mgetsockname.c b/mgetsockname.c index 6dce1aa..aff0f62 100644 --- a/mgetsockname.c +++ b/mgetsockname.c @@ -26,8 +26,8 @@ int mgetsockname(Entry *e, void *p1, void *p2, void *p3, void *p4, void *p5) } - if (!addrlen) return EINVAL; - if (!sock_addr) return EINVAL; + if (!addrlen || !addr) return EINVAL; + if (!*addrlen) return 0; tmp.sin_family = AF_INET; IncBusy();