From: Vlad S. <ser...@us...> - 2005-08-07 22:05:39
|
Update of /cvsroot/naviserver/modules/nssys In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv32315 Modified Files: tclsys.c test.tcl Log Message: ns_sysudp works now Index: tclsys.c =================================================================== RCS file: /cvsroot/naviserver/modules/nssys/tclsys.c,v retrieving revision 1.3 retrieving revision 1.4 diff -C2 -d -r1.3 -r1.4 *** tclsys.c 7 Aug 2005 21:49:35 -0000 1.3 --- tclsys.c 7 Aug 2005 22:05:30 -0000 1.4 *************** *** 1814,1825 **** struct sockaddr_in sa; int i,salen = sizeof(sa); ! char *address = 0, *data = 0; ! int sock, len, port = 0, timeout = 5, retries = 1, noreply = 0; ! if(objc < 1) { Tcl_WrongNumArgs(interp,1,objv," ?-timeout N -retries N ?-noreply 1|0? address port data"); return TCL_ERROR; } ! for(i = 1;i < objc-1;i++) { if(!strcmp(Tcl_GetString(objv[i]),"-timeout")) { timeout = atoi(Tcl_GetString(objv[i+1])); --- 1814,1825 ---- struct sockaddr_in sa; int i,salen = sizeof(sa); ! char *address = 0, *port = 0, *data = 0; ! int sock, len, timeout = 5, retries = 1, noreply = 0; ! if(objc < 3) { Tcl_WrongNumArgs(interp,1,objv," ?-timeout N -retries N ?-noreply 1|0? address port data"); return TCL_ERROR; } ! for(i = 1;i < objc-1;i += 2) { if(!strcmp(Tcl_GetString(objv[i]),"-timeout")) { timeout = atoi(Tcl_GetString(objv[i+1])); *************** *** 1837,1841 **** } if(i < objc) address = Tcl_GetString(objv[i++]); ! if(i < objc) port = atoi(Tcl_GetString(objv[i++])); if(i < objc) data = Tcl_GetStringFromObj(objv[i++],&len); if(!address || !port || !data) { --- 1837,1841 ---- } if(i < objc) address = Tcl_GetString(objv[i++]); ! if(i < objc) port = Tcl_GetString(objv[i++]); if(i < objc) data = Tcl_GetStringFromObj(objv[i++],&len); if(!address || !port || !data) { *************** *** 1844,1857 **** } sa.sin_family = AF_INET; ! sa.sin_port = htons((unsigned short) port); ! sa.sin_addr.s_addr = inet_addr(!*address ? INADDR_ANY : address); sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0) { ! Tcl_AppendResult(interp, "socket error ", strerror(errno), 0); return TCL_ERROR; } resend: ! if (sendto(sock, data, len, 0,(struct sockaddr*)&sa,sizeof(sa)) < 0) { ! Tcl_AppendResult(interp, "sendto error ", strerror(errno), 0); return TCL_ERROR; } --- 1844,1857 ---- } sa.sin_family = AF_INET; ! sa.sin_port = htons(atoi(port)); ! sa.sin_addr.s_addr = !*address ? INADDR_ANY : inet_addr(address); sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0) { ! Tcl_AppendResult(interp, "socket error: ", address, ":", port, " ", strerror(errno), 0); return TCL_ERROR; } resend: ! if (sendto(sock, data, len, 0,(struct sockaddr*)&sa, sizeof(sa)) < 0) { ! Tcl_AppendResult(interp, "sendto error: ", address, ":", port, " ", strerror(errno), 0); return TCL_ERROR; } *************** *** 1861,1865 **** } memset(buf,0,sizeof(buf)); - Ns_SockSetNonBlocking(sock); wait: FD_ZERO(&fds); --- 1861,1864 ---- *************** *** 1873,1877 **** goto wait; } ! Tcl_AppendResult(interp, "select error ", strerror(errno), 0); close(sock); return TCL_ERROR; --- 1872,1876 ---- goto wait; } ! Tcl_AppendResult(interp, "select error: ", address, ":", port, " ", strerror(errno), 0); close(sock); return TCL_ERROR; Index: test.tcl =================================================================== RCS file: /cvsroot/naviserver/modules/nssys/test.tcl,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** test.tcl 17 Jun 2005 03:03:41 -0000 1.1.1.1 --- test.tcl 7 Aug 2005 22:05:30 -0000 1.2 *************** *** 1,2 **** --- 1,9 ---- + #!/usr/bin/tclsh + + load /usr/local/lib/tclsys.so + + # Send HTTP over UDP + puts [ns_sysudp 127.0.0.1 80 "GET / HTTP/1.0\r\n\r\n"] + # Setting channel on video device set fd [open /dev/video0 r+] |