import sys import time import socket import os #---------------------------------------------------------------------- # udp echo server #---------------------------------------------------------------------- def udp_echo_server(ip, port): sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) if sys.platform[:3] != 'win': sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) BUF_SIZE = 8 * 1024 * 1024 sock.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, BUF_SIZE) sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, BUF_SIZE) #print sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF) #print sock.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF) try: sock.bind((ip, port)) except socket.error, e: sys.stderr.write('bind (%s, %d) failed: %s'%(ip, port, str(e))) sock.close() return -1 print 'listening udp on ("%s", %d)'%(ip, port) while True: try: data, remote = sock.recvfrom(8192) except socket.error, e: continue try: sock.sendto(data, remote) except socket.error, e: pass return 0 #---------------------------------------------------------------------- # entry #---------------------------------------------------------------------- def main(args = None): if args == None: args = [ n for n in sys.argv ] import optparse p = optparse.OptionParser('usage: %prog [options] to start cron') p.add_option('-p', '--port', dest = 'port', help = 'config port number') p.add_option('-i', '--ip', dest = 'ip', help = 'config ip address') options, args = p.parse_args(args) if options.port is None: print >>sys.stderr, 'no port given, Try --help for more information.' return 1 if options.ip is None: print >>sys.stderr, 'no ip given, Try --help for more information.' return 1 udp_echo_server(options.ip, int(options.port)) return 0 #---------------------------------------------------------------------- # testing case #---------------------------------------------------------------------- if __name__ == '__main__': #main(['', '--port=2015', '--ip=0.0.0.0']) main()