udt-protocol Mailing List for udt
Brought to you by:
lilyco
You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
|
Feb
(2) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2008 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2009 |
Jan
|
Feb
(2) |
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2014 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
2016 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2024 |
Jan
|
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: * N. * <neu...@ho...> - 2024-02-17 14:59:17
|
Dear all I search any update since 2013: - https://sourceforge.net/projects/udt/files/ I have done 2 posts: - https://sourceforge.net/p/udt/discussion/393036/thread/423f86063e/ - https://sourceforge.net/p/udt/feature-requests/14/ Can you help me? Thanks in advance. Regards, Neustradamus |
From: nagesh <nag...@gm...> - 2014-08-04 04:28:29
|
Hi all. I am learning udp protocal. now i want to implement udt based udp protocal .now i need java wrapper for android jni code.can you give some suggestions how to implement..If u have code just share with me... |
From: darshana p. <drp...@gm...> - 2012-04-03 04:11:43
|
Respected sir, I am keeping your paper “UDT: UDP based Data Transfer for High-Speed Wide area Networks “as a base paper. In that you have written that you have implemented nine example algorithms using Composable UDT. I have downloaded recent source code of UDT as an open source in sf.netsite. But I cannot found implemented control algorithm. Is any patch is required for that? If I want to put any control algorithm then at which place/ in which file I put it or should I put control algorithm in separate file and add it in UDT. If possible please provide me one implemented example algorithm using Composable UDT. Please guide me in proper direction. Hope for your positive response. Thanking you in advance. |
From: <ven...@gm...> - 2010-11-21 08:13:53
|
<table cellpadding="0" cellspacing="0" border="0" style="font-family:'lucida grande', tahoma, verdana, arial, sans-serif;"> <tr> <td bgcolor="#f7f7f7" width="100%"> <table border="0" cellpadding="0" cellspacing="0" width="620"> <tr> <td style="padding-left:18px;font-size:16px;" align="left" bgcolor="#609933" height="34" valign="middle"> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702" style="font-weight:bold;letter-spacing:-0.03em;color:#fff;text-decoration:none">Hi udt...@li...!</a> </td> </tr> </table> </td> </tr> <tr> <td> <table style="border-bottom: 1px solid #693; border-left: 1px solid #693; border-right: 1px solid #693;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="620"> <tr> <td style="padding: 18px 18px 10px; font-size: 11px;" align="left" bgcolor="#ffffff" valign="top" width="100"> </td> <td style="padding:18px 18px 18px 0;font-size:13px;" align="left" bgcolor="white" valign="top" width="*"> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702" style="font-weight:bold;color:#000;text-decoration:none">Check out my photos on Shtyle.fm</a> <br><br> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702" style="color:#000;text-decoration:none">I've created a profile on Shtyle.fm to upload my photos, share files and make new friends and I want to add you as a friend.</a> <br><br> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702" style='color:#fff;font-weight:bold;text-decoration:none;font-size:16px;border:1px solid #f60;background-color:#cd4a04; padding:7px 10px 7px 10px;display:block;width:250px;'>View my Profile and Photos »</a> <br> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702" style="color:#000;text-decoration:none">Regards,</a> <br> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702">venkat</a> <br><br> <br> </td> </tr> </table> </td> </tr> <tr> <td style="padding: 18px 18px 10px; font-size: 11px;" align="left" bgcolor="#ffffff" valign="top" width="100"> You can <a style='color: #666' href='http://www.shtyle.fm/optout.do?_opt_=1333114131'>opt-out</a> of Shtyle.fm emails. </td> </tr> </table> |
From: <ven...@gm...> - 2010-08-04 02:26:24
|
<table cellpadding="0" cellspacing="0" border="0" style="font-family:'lucida grande', tahoma, verdana, arial, sans-serif;"> <tr> <td bgcolor="#f7f7f7" width="100%"> <table border="0" cellpadding="0" cellspacing="0" width="620"> <tr> <td style="padding-left:18px;font-size:16px;" align="left" bgcolor="#609933" height="34" valign="middle"> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702" style="font-weight:bold;letter-spacing:-0.03em;color:#fff;text-decoration:none">Hi udt...@li...!</a> </td> </tr> </table> </td> </tr> <tr> <td> <table style="border-bottom: 1px solid #693; border-left: 1px solid #693; border-right: 1px solid #693;" bgcolor="#ffffff" border="0" cellpadding="0" cellspacing="0" width="620"> <tr> <td style="padding: 18px 18px 10px; font-size: 11px;" align="left" bgcolor="#ffffff" valign="top" width="100"> </td> <td style="padding:18px 18px 18px 0;font-size:13px;" align="left" bgcolor="white" valign="top" width="*"> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702" style="font-weight:bold;color:#000;text-decoration:none">Check out my photos on Shtyle.fm</a> <br><br> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702" style="color:#000;text-decoration:none">I've created a profile on Shtyle.fm to upload my photos, share files and make new friends and I want to add you as a friend.</a> <br><br> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702" style='color:#fff;font-weight:bold;text-decoration:none;font-size:16px;border:1px solid #f60;background-color:#cd4a04; padding:7px 10px 7px 10px;display:block;width:250px;'>View my Profile and Photos »</a> <br> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702" style="color:#000;text-decoration:none">Regards,</a> <br> <a href="http://www.shtyle.fm/einv.do?iid=621B370B6404AAF123BF19049573B702">venkat</a> <br><br> <br> </td> </tr> </table> </td> </tr> <tr> <td style="padding: 18px 18px 10px; font-size: 11px;" align="left" bgcolor="#ffffff" valign="top" width="100"> You can <a style='color: #666' href='http://www.shtyle.fm/optout.do?_opt_=982580394'>opt-out</a> of Shtyle.fm emails. </td> </tr> </table> |
From: venkatrao <in...@pi...> - 2008-05-12 06:40:18
|
View My Invitation here >> http://pimpmysearch.com/r.php?g=Q.Yhqndw_Udr&m=xgw-surwrfro,olvwv.vrxufhirujh.qhw&s=venkatrao thanks, venkatrao --------------------------------------------- This invitation was sent by venkatrao (ven...@gm...) via PimpMySearch to udt...@li.... If you would not like to receive further invitations from your friends please let us know http://invite.pimpmysearch.com/i/stopinvites.php?id=udt...@li... Or write to: Zyber Media, PO Box 1046, Novi, MI 48376-1046, USA. |
From: venkatrao n. <ven...@gm...> - 2008-02-10 15:56:47
|
Hi, I got some errors , while excuting UDT simulation scripts. I was followed insrstiuction as given in UDT documantation simulation script, even thought i was getting errors like given below .( I have done all changes, but i did't find where Agent/UDT is defind) PATH: ./ns-allinone-2.26/ns-2.26/udt/ (ns test.tcl) Error 1 : invalid command name "Agent/UDT" while executing "Agent/UDT set mtu_ 1500" ( file "test.tcl" line 3) ./ns-allinone-2.26/ns-2.26/udt ( ns sim.tcl) Error 2: invalid command name "Agent/UDT" while executing "Agent/UDT create _o52 " invoked from within "catch "$className create $o $args" msg" invoked from within "if [catch "$className create $o $args" msg] { if [string match "__FAILED_SHADOW_OBJECT_" $msg] { delete $o return "" } global errorInfo error "class $..." (procedure "new" line 3) invoked from within "new Agent/UDT" (procedure "build-udt" line 4) invoked from within "build-udt $na $nb 1500 100000 0 0" ( file "sim.tcl" line 117) if any one know about how to overcome these errors , please reply..... |
From: changhao <cha...@ma...> - 2007-02-09 16:13:29
|
i write a udt-m(from cvs) test server and client by UDT::select() as below,and the serverside crashed after sometime and the test work ok for udt3. //==========client========================== #include<winsock2.h> #include <ws2tcpip.h> #include"../udt/cpp/udt.h" #include <cstdlib> #include <iostream> #include <map> #include <set> using namespace std; class UClient; set<UClient*> clis; //new clients CRITICAL_SECTION cts_clis; // void showOpt(UDTSOCKET uSkt) { int optval; int optlen; UDT::getsockopt(uSkt,0,UDT_FC,&optval,&optlen); cout<<"UDT_FC:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_MSS,&optval,&optlen); cout<<"UDT_MSS:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_SNDBUF,&optval,&optlen); cout<<"UDT_SNDBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_RCVBUF,&optval,&optlen); cout<<"UDT_RCVBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDP_SNDBUF,&optval,&optlen); cout<<"UDP_SNDBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDP_RCVBUF,&optval,&optlen); cout<<"UDP_RCVBUF:"<<optval<<"\n"; } class UClient { public: UDTSOCKET udtSkt; char sdata[10]; char rdata[10]; bool recved; UClient(UDTSOCKET skt) { udtSkt=skt; strcpy(sdata,"test"); bool isBlock=false; UDT::setsockopt(udtSkt,0, UDT_RCVSYN, &isBlock, sizeof(bool)); UDT::setsockopt(udtSkt,0, UDT_SNDSYN, &isBlock, sizeof(bool)); recved=false; } void doSend() { if(recved) { cout<<"UDT::send "<<UDT::send(udtSkt,sdata,5)<<" UDT::send End\n"; recved=false; } // } void doRecv() { cout<<"UDT::recv "<< UDT::recv(udtSkt,sdata,5) <<" UDT::recv End\n"; recved=true; } }; DWORD WINAPI ThreadUdtMsg(LPVOID lpParam) { map<UDTSOCKET,UClient*> skt2cli; UDT::UDSET ruSet,wuSet; timeval tout; tout.tv_sec=1;tout.tv_usec=0; while(true) { EnterCriticalSection(&cts_clis); for(set<UClient*>::iterator cit=clis.begin();cit!=clis.end();cit++) { skt2cli[(*cit)->udtSkt]=*cit; } clis.clear(); LeaveCriticalSection(&cts_clis); if(skt2cli.size()>0) { UD_ZERO(&ruSet); UD_ZERO(&wuSet); for(map<UDTSOCKET,UClient*>::iterator mit=skt2cli.begin();mit!=skt2cli.end();mit++) { UD_SET(mit->first,&ruSet); UD_SET(mit->first,&wuSet); } if(UDT::select(0,&ruSet,&wuSet,NULL,&tout)>0) { for(UDT::UDSET::iterator sit=ruSet.begin();sit!=ruSet.end();sit++) { skt2cli[*sit]->doRecv(); } for(UDT::UDSET::iterator sit=wuSet.begin();sit!=wuSet.end();sit++) { skt2cli[*sit]->doSend(); } } Sleep(1000); } else Sleep(500); } return 0; } void main(void) { SOCKADDR_IN sadd; sadd.sin_family = AF_INET; sadd.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); sadd.sin_port = htons(9000); InitializeCriticalSection(&cts_clis); DWORD dwThreadId; CreateThread(NULL, 0, ThreadUdtMsg,NULL, 0, &dwThreadId); int count=0; while(true) { if(count<100) { UDTSOCKET uSkt=UDT::socket(AF_INET, SOCK_STREAM, 0); int UDT_FC_val=128; UDT::setsockopt(uSkt,0, UDT_FC, &UDT_FC_val, sizeof(int)); int UDT_SNDBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDT_SNDBUF, &UDT_SNDBUF_val, sizeof(int)); int UDT_RCVBUF_val=1024*32; UDT::setsockopt(uSkt,0, UDT_RCVBUF, &UDT_RCVBUF_val, sizeof(int)); int UDP_SNDBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDP_SNDBUF, &UDP_SNDBUF_val, sizeof(int)); int UDP_RCVBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDP_RCVBUF, &UDP_RCVBUF_val, sizeof(int)); if(UDT::ERROR!=UDT::connect(uSkt,(sockaddr *)&sadd,sizeof(SOCKADDR_IN))) { EnterCriticalSection(&cts_clis); clis.insert(new UClient(uSkt)); LeaveCriticalSection(&cts_clis);; count++; cout<<"Num "<<count<<"\n"; //showOpt(uSkt); } Sleep(100); } else Sleep(10000); } } //=========server============================= #include<winsock2.h> #include <ws2tcpip.h> #include"../udt/cpp/udt.h" #include <cstdlib> #include <iostream> #include <set> #include <map> using namespace std; class UClient; set<UClient*> clis; // new clients CRITICAL_SECTION cts_clis; // void showOpt(UDTSOCKET uSkt) { int optval; int optlen; bool boolval; UDT::getsockopt(uSkt,0,UDT_RCVSYN,&boolval,&optlen); cout<<"UDT_RCVSYN:"<<boolval<<"\n"; UDT::getsockopt(uSkt,0,UDT_SNDSYN,&boolval,&optlen); cout<<"UDT_SNDSYN:"<<boolval<<"\n"; UDT::getsockopt(uSkt,0,UDT_FC,&optval,&optlen); cout<<"UDT_FC:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_MSS,&optval,&optlen); cout<<"UDT_MSS:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_SNDBUF,&optval,&optlen); cout<<"UDT_SNDBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_RCVBUF,&optval,&optlen); cout<<"UDT_RCVBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDP_SNDBUF,&optval,&optlen); cout<<"UDP_SNDBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDP_RCVBUF,&optval,&optlen); cout<<"UDP_RCVBUF:"<<optval<<"\n"; } class UClient { public: UDTSOCKET udtSkt; char sdata[10]; char rdata[10]; bool recved; UClient(UDTSOCKET skt) { udtSkt=skt; strcpy(sdata,"test"); bool isBlock=false; UDT::setsockopt(udtSkt,0, UDT_RCVSYN, &isBlock, sizeof(bool)); UDT::setsockopt(udtSkt,0, UDT_SNDSYN, &isBlock, sizeof(bool)); //showOpt(udtSkt); recved=true; } void doSend() { if(recved) { cout<<"UDT::send "<<UDT::send(udtSkt,sdata,5)<<" UDT::send End\n"; recved=false; } // } void doRecv() { cout<<"UDT::recv "<< UDT::recv(udtSkt,sdata,5) <<" UDT::recv End\n"; recved=true; } }; DWORD WINAPI ThreadUdtMsg(LPVOID lpParam) { map<UDTSOCKET,UClient*> skt2cli; UDT::UDSET ruSet,wuSet; timeval tout; tout.tv_sec=1;tout.tv_usec=0; while(true) { EnterCriticalSection(&cts_clis); for(set<UClient*>::iterator cit=clis.begin();cit!=clis.end();cit++) { skt2cli[(*cit)->udtSkt]=*cit; } clis.clear(); LeaveCriticalSection(&cts_clis); if(skt2cli.size()>0) { UD_ZERO(&ruSet); UD_ZERO(&wuSet); for(map<UDTSOCKET,UClient*>::iterator mit=skt2cli.begin();mit!=skt2cli.end();mit++) { UD_SET(mit->first,&ruSet); UD_SET(mit->first,&wuSet); } if(UDT::select(0,&ruSet,&wuSet,NULL,&tout)>0) { for(UDT::UDSET::iterator sit=ruSet.begin();sit!=ruSet.end();sit++) { skt2cli[*sit]->doRecv(); } for(UDT::UDSET::iterator sit=wuSet.begin();sit!=wuSet.end();sit++) { skt2cli[*sit]->doSend(); } } Sleep(1000); } else Sleep(500); } return 0; } void main(void) { InitializeCriticalSection(&cts_clis); SOCKADDR_IN sadd; SOCKADDR_IN cadd; SOCKADDR_IN aadd; UDTSOCKET tmpUdt; int addlen=sizeof(SOCKADDR_IN); UDTSOCKET uSkt=UDT::socket(AF_INET, SOCK_STREAM, 0); int UDT_FC_val=128; UDT::setsockopt(uSkt,0, UDT_FC, &UDT_FC_val, sizeof(int)); int UDT_SNDBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDT_SNDBUF, &UDT_SNDBUF_val, sizeof(int)); int UDT_RCVBUF_val=1024*32; UDT::setsockopt(uSkt,0, UDT_RCVBUF, &UDT_RCVBUF_val, sizeof(int)); int UDP_SNDBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDP_SNDBUF, &UDP_SNDBUF_val, sizeof(int)); int UDP_RCVBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDP_RCVBUF, &UDP_RCVBUF_val, sizeof(int)); sadd.sin_addr.s_addr = inet_addr("127.0.0.1"); sadd.sin_family = AF_INET; sadd.sin_port = htons(9000); UDT::bind(uSkt,(sockaddr *)&sadd,sizeof(SOCKADDR_IN)); if(UDT::listen(uSkt,50)==UDT::ERROR) { cout << "UDT::listen: " << UDT::getlasterror().getErrorMessage(); exit(0); } DWORD dwThreadId; CreateThread(NULL, 0, ThreadUdtMsg,NULL, 0, &dwThreadId); while(true) if((tmpUdt=UDT::accept(uSkt,(sockaddr *)&cadd,&addlen))!=UDT::INVALID_SOCK) { EnterCriticalSection(&cts_clis); clis.insert(new UClient(tmpUdt)); LeaveCriticalSection(&cts_clis); } } |
From: changhao <cha...@ma...> - 2007-02-09 16:02:46
|
i write a udt-m(from cvs) test server and client by UDT::select() as below,and the serverside crashed after sometime and the test work ok for udt3. //==========client========================== #include<winsock2.h> #include <ws2tcpip.h> #include"../udt/cpp/udt.h" #include <cstdlib> #include <iostream> #include <map> #include <set> using namespace std; class UClient; set<UClient*> clis; //new clients CRITICAL_SECTION cts_clis; // void showOpt(UDTSOCKET uSkt) { int optval; int optlen; UDT::getsockopt(uSkt,0,UDT_FC,&optval,&optlen); cout<<"UDT_FC:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_MSS,&optval,&optlen); cout<<"UDT_MSS:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_SNDBUF,&optval,&optlen); cout<<"UDT_SNDBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_RCVBUF,&optval,&optlen); cout<<"UDT_RCVBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDP_SNDBUF,&optval,&optlen); cout<<"UDP_SNDBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDP_RCVBUF,&optval,&optlen); cout<<"UDP_RCVBUF:"<<optval<<"\n"; } class UClient { public: UDTSOCKET udtSkt; char sdata[10]; char rdata[10]; bool recved; UClient(UDTSOCKET skt) { udtSkt=skt; strcpy(sdata,"test"); bool isBlock=false; UDT::setsockopt(udtSkt,0, UDT_RCVSYN, &isBlock, sizeof(bool)); UDT::setsockopt(udtSkt,0, UDT_SNDSYN, &isBlock, sizeof(bool)); recved=false; } void doSend() { if(recved) { cout<<"UDT::send "<<UDT::send(udtSkt,sdata,5)<<" UDT::send End\n"; recved=false; } // } void doRecv() { cout<<"UDT::recv "<< UDT::recv(udtSkt,sdata,5) <<" UDT::recv End\n"; recved=true; } }; DWORD WINAPI ThreadUdtMsg(LPVOID lpParam) { map<UDTSOCKET,UClient*> skt2cli; UDT::UDSET ruSet,wuSet; timeval tout; tout.tv_sec=1;tout.tv_usec=0; while(true) { EnterCriticalSection(&cts_clis); for(set<UClient*>::iterator cit=clis.begin();cit!=clis.end();cit++) { skt2cli[(*cit)->udtSkt]=*cit; } clis.clear(); LeaveCriticalSection(&cts_clis); if(skt2cli.size()>0) { UD_ZERO(&ruSet); UD_ZERO(&wuSet); for(map<UDTSOCKET,UClient*>::iterator mit=skt2cli.begin();mit!=skt2cli.end();mit++) { UD_SET(mit->first,&ruSet); UD_SET(mit->first,&wuSet); } if(UDT::select(0,&ruSet,&wuSet,NULL,&tout)>0) { for(UDT::UDSET::iterator sit=ruSet.begin();sit!=ruSet.end();sit++) { skt2cli[*sit]->doRecv(); } for(UDT::UDSET::iterator sit=wuSet.begin();sit!=wuSet.end();sit++) { skt2cli[*sit]->doSend(); } } Sleep(1000); } else Sleep(500); } return 0; } void main(void) { SOCKADDR_IN sadd; sadd.sin_family = AF_INET; sadd.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); sadd.sin_port = htons(9000); InitializeCriticalSection(&cts_clis); DWORD dwThreadId; CreateThread(NULL, 0, ThreadUdtMsg,NULL, 0, &dwThreadId); int count=0; while(true) { if(count<100) { UDTSOCKET uSkt=UDT::socket(AF_INET, SOCK_STREAM, 0); int UDT_FC_val=128; UDT::setsockopt(uSkt,0, UDT_FC, &UDT_FC_val, sizeof(int)); int UDT_SNDBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDT_SNDBUF, &UDT_SNDBUF_val, sizeof(int)); int UDT_RCVBUF_val=1024*32; UDT::setsockopt(uSkt,0, UDT_RCVBUF, &UDT_RCVBUF_val, sizeof(int)); int UDP_SNDBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDP_SNDBUF, &UDP_SNDBUF_val, sizeof(int)); int UDP_RCVBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDP_RCVBUF, &UDP_RCVBUF_val, sizeof(int)); if(UDT::ERROR!=UDT::connect(uSkt,(sockaddr *)&sadd,sizeof(SOCKADDR_IN))) { EnterCriticalSection(&cts_clis); clis.insert(new UClient(uSkt)); LeaveCriticalSection(&cts_clis);; count++; cout<<"Num "<<count<<"\n"; //showOpt(uSkt); } Sleep(100); } else Sleep(10000); } } //=========server============================= #include<winsock2.h> #include <ws2tcpip.h> #include"../udt/cpp/udt.h" #include <cstdlib> #include <iostream> #include <set> #include <map> using namespace std; class UClient; set<UClient*> clis; // new clients CRITICAL_SECTION cts_clis; // void showOpt(UDTSOCKET uSkt) { int optval; int optlen; bool boolval; UDT::getsockopt(uSkt,0,UDT_RCVSYN,&boolval,&optlen); cout<<"UDT_RCVSYN:"<<boolval<<"\n"; UDT::getsockopt(uSkt,0,UDT_SNDSYN,&boolval,&optlen); cout<<"UDT_SNDSYN:"<<boolval<<"\n"; UDT::getsockopt(uSkt,0,UDT_FC,&optval,&optlen); cout<<"UDT_FC:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_MSS,&optval,&optlen); cout<<"UDT_MSS:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_SNDBUF,&optval,&optlen); cout<<"UDT_SNDBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDT_RCVBUF,&optval,&optlen); cout<<"UDT_RCVBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDP_SNDBUF,&optval,&optlen); cout<<"UDP_SNDBUF:"<<optval<<"\n"; UDT::getsockopt(uSkt,0,UDP_RCVBUF,&optval,&optlen); cout<<"UDP_RCVBUF:"<<optval<<"\n"; } class UClient { public: UDTSOCKET udtSkt; char sdata[10]; char rdata[10]; bool recved; UClient(UDTSOCKET skt) { udtSkt=skt; strcpy(sdata,"test"); bool isBlock=false; UDT::setsockopt(udtSkt,0, UDT_RCVSYN, &isBlock, sizeof(bool)); UDT::setsockopt(udtSkt,0, UDT_SNDSYN, &isBlock, sizeof(bool)); //showOpt(udtSkt); recved=true; } void doSend() { if(recved) { cout<<"UDT::send "<<UDT::send(udtSkt,sdata,5)<<" UDT::send End\n"; recved=false; } // } void doRecv() { cout<<"UDT::recv "<< UDT::recv(udtSkt,sdata,5) <<" UDT::recv End\n"; recved=true; } }; DWORD WINAPI ThreadUdtMsg(LPVOID lpParam) { map<UDTSOCKET,UClient*> skt2cli; UDT::UDSET ruSet,wuSet; timeval tout; tout.tv_sec=1;tout.tv_usec=0; while(true) { EnterCriticalSection(&cts_clis); for(set<UClient*>::iterator cit=clis.begin();cit!=clis.end();cit++) { skt2cli[(*cit)->udtSkt]=*cit; } clis.clear(); LeaveCriticalSection(&cts_clis); if(skt2cli.size()>0) { UD_ZERO(&ruSet); UD_ZERO(&wuSet); for(map<UDTSOCKET,UClient*>::iterator mit=skt2cli.begin();mit!=skt2cli.end();mit++) { UD_SET(mit->first,&ruSet); UD_SET(mit->first,&wuSet); } if(UDT::select(0,&ruSet,&wuSet,NULL,&tout)>0) { for(UDT::UDSET::iterator sit=ruSet.begin();sit!=ruSet.end();sit++) { skt2cli[*sit]->doRecv(); } for(UDT::UDSET::iterator sit=wuSet.begin();sit!=wuSet.end();sit++) { skt2cli[*sit]->doSend(); } } Sleep(1000); } else Sleep(500); } return 0; } void main(void) { InitializeCriticalSection(&cts_clis); SOCKADDR_IN sadd; SOCKADDR_IN cadd; SOCKADDR_IN aadd; UDTSOCKET tmpUdt; int addlen=sizeof(SOCKADDR_IN); UDTSOCKET uSkt=UDT::socket(AF_INET, SOCK_STREAM, 0); int UDT_FC_val=128; UDT::setsockopt(uSkt,0, UDT_FC, &UDT_FC_val, sizeof(int)); int UDT_SNDBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDT_SNDBUF, &UDT_SNDBUF_val, sizeof(int)); int UDT_RCVBUF_val=1024*32; UDT::setsockopt(uSkt,0, UDT_RCVBUF, &UDT_RCVBUF_val, sizeof(int)); int UDP_SNDBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDP_SNDBUF, &UDP_SNDBUF_val, sizeof(int)); int UDP_RCVBUF_val=1024*16; UDT::setsockopt(uSkt,0, UDP_RCVBUF, &UDP_RCVBUF_val, sizeof(int)); sadd.sin_addr.s_addr = inet_addr("127.0.0.1"); sadd.sin_family = AF_INET; sadd.sin_port = htons(9000); UDT::bind(uSkt,(sockaddr *)&sadd,sizeof(SOCKADDR_IN)); if(UDT::listen(uSkt,50)==UDT::ERROR) { cout << "UDT::listen: " << UDT::getlasterror().getErrorMessage(); exit(0); } DWORD dwThreadId; CreateThread(NULL, 0, ThreadUdtMsg,NULL, 0, &dwThreadId); while(true) if((tmpUdt=UDT::accept(uSkt,(sockaddr *)&cadd,&addlen))!=UDT::INVALID_SOCK) { EnterCriticalSection(&cts_clis); clis.insert(new UClient(tmpUdt)); LeaveCriticalSection(&cts_clis); } } |
From: <di...@te...> - 2006-08-25 18:41:54
|
Hi all, I have been testing the UDT toolkit on a high speed connection (100Mbps) to transfer very large files (180GB and higher) and I have some questions regarding some issues I have been seeing. Our test environment is one Dual PIV 3.0ghz machine on the west coast running the sender and one Dual PIV 3.0ghz machine on the east coast running the receiver. They are linked via a 100Mbps wire over VPN. We are running Windows Server 2003 on both sides and have compiled the udt source with Visual Studio 2003 (VC 7.0) Hopefully someone on this list has some suggestions. Basically, we have not been able to get higher than 40Mbps and some errors have been cropping up during transfer. These are the issues. The main issue is how to get the speed higher. The second issue is that we sporadically get GPFs.The third issue is that every once in awhile the recvfile program exits with a blocking mode error and finally, frequently during the transfer both the sender and receiver pause for up to 30 seconds. Now I have some questions. The packet sequence number is 16bits - with our file sizes and the size of the MTU (about 1400 bytes) it seems to me that the sequence number can wrap around. Is this possible under our scenario? I suspect that this may be the cause of the GPF. The GPF occurred in List.cpp on line 389 which is the following. // return the first loss seq. no. int32_t seqno = m_piData1[m_iHead]; My next questions regard how to optimize the send/receive buffers and Flow control and the MTU size. 1. Do you have to set the UDT_MSS value on both the send and receive socket? 2. I was wondering why the Win32 UDT_MSS value is defined as 1052? Is that some magic number? 3. With regards to setting the buffer sizes, this line in the configuration section is pretty confusing: "the receiving buffer size should not be less than the UDT receiver buffer size, in order that the flow control is effective." I'm not sure what exactly this means. Does it mean that my receive buffer allocated in my program should not be less than the value set by UDT_RCVBUF? 4. What effect does UDT_FC have on the transmission speed? So far I have not set this number because I am not clear on its usage and impact. Lastly, this line: "the buffer sizes for both sides should be at least Bandwidth*RTT" Our bandwidth is 100Mbps and our RTT is around 100ms. So what is the actual calcuation to get the actual buffer size?? Is it 100000000*100? is it (100000000 / 8 ) * 100? or is it (100000000 / 8) * 0.1? or is it 100000000 * 0.1 ??? Sorry for all these questions but I haven't seen any one using UDT in this kind of environment. Thanks in advance to anyone who wants to jump in and help me optimize the code and to track down any issues in the UDT toolkit when used in this kind of environment -Dirk |