SocketTest.cs 89 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367
  1. // System.Net.Sockets.SocketTest.cs
  2. //
  3. // Authors:
  4. // Brad Fitzpatrick ([email protected])
  5. // Gonzalo Paniagua Javier ([email protected])
  6. //
  7. // (C) Copyright 2003 Brad Fitzpatrick
  8. // Copyright (c) 2005 Novell, Inc. (http://www.novell.com)
  9. //
  10. using System;
  11. using System.Collections;
  12. using System.Threading;
  13. using System.Net;
  14. using System.Net.Sockets;
  15. using NUnit.Framework;
  16. #if NET_2_0
  17. using System.Collections.Generic;
  18. #endif
  19. namespace MonoTests.System.Net.Sockets
  20. {
  21. [TestFixture]
  22. public class SocketTest
  23. {
  24. // note: also used in SocketCas tests
  25. public const string BogusAddress = "192.168.244.244";
  26. public const int BogusPort = 23483;
  27. [Test]
  28. public void ConnectIPAddressAny ()
  29. {
  30. IPEndPoint ep = new IPEndPoint (IPAddress.Any, 0);
  31. try {
  32. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
  33. s.Connect (ep);
  34. s.Close ();
  35. }
  36. Assert.Fail ("#1");
  37. } catch (SocketException ex) {
  38. Assert.AreEqual (10049, ex.ErrorCode, "#2");
  39. }
  40. try {
  41. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  42. s.Connect (ep);
  43. s.Close ();
  44. }
  45. Assert.Fail ("#3");
  46. } catch (SocketException ex) {
  47. Assert.AreEqual (10049, ex.ErrorCode, "#4");
  48. }
  49. }
  50. [Test]
  51. [Ignore ("Bug #75158")] // Looks like MS fails after the .ctor, when you try to use the socket
  52. public void IncompatibleAddress ()
  53. {
  54. IPEndPoint epIPv6 = new IPEndPoint (IPAddress.IPv6Any,
  55. 0);
  56. try {
  57. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP)) {
  58. s.Connect (epIPv6);
  59. s.Close ();
  60. }
  61. Assert.Fail ("#1");
  62. } catch (SocketException ex) {
  63. #if !NET_2_0
  64. // invalid argument
  65. int expectedError = 10022;
  66. #else
  67. // address incompatible with protocol
  68. int expectedError = 10047;
  69. #endif
  70. Assert.AreEqual (expectedError, ex.ErrorCode,
  71. "#2");
  72. }
  73. }
  74. [Test]
  75. [Category ("InetAccess")]
  76. public void EndConnect ()
  77. {
  78. IPAddress ipOne = IPAddress.Parse (BogusAddress);
  79. IPEndPoint ipEP = new IPEndPoint (ipOne, BogusPort);
  80. Socket sock = new Socket (ipEP.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  81. IAsyncResult ar = sock.BeginConnect (ipEP, null, null);
  82. try {
  83. // should raise an exception because connect was bogus
  84. sock.EndConnect (ar);
  85. Assert.Fail ("#1");
  86. } catch (SocketException ex) {
  87. Assert.AreEqual (10060, ex.ErrorCode, "#2");
  88. }
  89. }
  90. [Test]
  91. [ExpectedException (typeof (ArgumentNullException))]
  92. public void SelectEmpty ()
  93. {
  94. ArrayList list = new ArrayList ();
  95. Socket.Select (list, list, list, 1000);
  96. }
  97. private bool BlockingConnect (bool block)
  98. {
  99. IPEndPoint ep = new IPEndPoint(IPAddress.Loopback, 1234);
  100. Socket server = new Socket(AddressFamily.InterNetwork,
  101. SocketType.Stream,
  102. ProtocolType.Tcp);
  103. server.Bind(ep);
  104. server.Blocking=block;
  105. server.Listen(0);
  106. Socket conn = new Socket (AddressFamily.InterNetwork,
  107. SocketType.Stream,
  108. ProtocolType.Tcp);
  109. conn.Connect (ep);
  110. Socket client = server.Accept();
  111. bool client_block = client.Blocking;
  112. client.Close();
  113. conn.Close();
  114. server.Close();
  115. return(client_block);
  116. }
  117. [Test]
  118. public void AcceptBlockingStatus()
  119. {
  120. bool block;
  121. block = BlockingConnect(true);
  122. Assert.AreEqual (block, true, "BlockingStatus01");
  123. block = BlockingConnect(false);
  124. Assert.AreEqual (block, false, "BlockingStatus02");
  125. }
  126. static bool CFAConnected = false;
  127. static ManualResetEvent CFACalledBack;
  128. private static void CFACallback (IAsyncResult asyncResult)
  129. {
  130. Socket sock = (Socket)asyncResult.AsyncState;
  131. CFAConnected = sock.Connected;
  132. if (sock.Connected) {
  133. sock.EndConnect (asyncResult);
  134. }
  135. CFACalledBack.Set ();
  136. }
  137. [Test]
  138. public void ConnectFailAsync ()
  139. {
  140. Socket sock = new Socket (AddressFamily.InterNetwork,
  141. SocketType.Stream,
  142. ProtocolType.Tcp);
  143. sock.Blocking = false;
  144. CFACalledBack = new ManualResetEvent (false);
  145. CFACalledBack.Reset ();
  146. /* Need a port that is not being used for
  147. * anything...
  148. */
  149. sock.BeginConnect (new IPEndPoint (IPAddress.Loopback,
  150. 114),
  151. new AsyncCallback (CFACallback),
  152. sock);
  153. CFACalledBack.WaitOne ();
  154. Assert.AreEqual (CFAConnected, false, "ConnectFail");
  155. }
  156. #if !TARGET_JVM
  157. [Test]
  158. #if !NET_2_0
  159. [ExpectedException (typeof (ArgumentException))]
  160. #endif
  161. public void SetSocketOptionBoolean ()
  162. {
  163. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback, 1);
  164. Socket sock = new Socket (ep.Address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
  165. try {
  166. sock.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
  167. } finally {
  168. sock.Close ();
  169. }
  170. }
  171. #endif
  172. [Test]
  173. public void TestSelect1 ()
  174. {
  175. Socket srv = CreateServer ();
  176. ClientSocket clnt = new ClientSocket (srv.LocalEndPoint);
  177. Thread th = new Thread (new ThreadStart (clnt.ConnectSleepClose));
  178. Socket acc = null;
  179. try {
  180. th.Start ();
  181. acc = srv.Accept ();
  182. clnt.Write ();
  183. ArrayList list = new ArrayList ();
  184. ArrayList empty = new ArrayList ();
  185. list.Add (acc);
  186. Socket.Select (list, empty, empty, 100);
  187. Assert.AreEqual (0, empty.Count, "#01");
  188. Assert.AreEqual (1, list.Count, "#02");
  189. Socket.Select (empty, list, empty, 100);
  190. Assert.AreEqual (0, empty.Count, "#03");
  191. Assert.AreEqual (1, list.Count, "#04");
  192. Socket.Select (list, empty, empty, -1);
  193. Assert.AreEqual (0, empty.Count, "#05");
  194. Assert.AreEqual (1, list.Count, "#06");
  195. // Need to read the 10 bytes from the client to avoid a RST
  196. byte [] bytes = new byte [10];
  197. acc.Receive (bytes);
  198. } finally {
  199. if (acc != null)
  200. acc.Close ();
  201. srv.Close ();
  202. }
  203. }
  204. static Socket CreateServer ()
  205. {
  206. Socket sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  207. sock.Bind (new IPEndPoint (IPAddress.Loopback, 0));
  208. sock.Listen (1);
  209. return sock;
  210. }
  211. class ClientSocket {
  212. Socket sock;
  213. EndPoint ep;
  214. public ClientSocket (EndPoint ep)
  215. {
  216. this.ep = ep;
  217. sock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  218. }
  219. public void ConnectSleepClose ()
  220. {
  221. sock.Connect (ep);
  222. Thread.Sleep (2000);
  223. sock.Close ();
  224. }
  225. public void Write ()
  226. {
  227. byte [] b = new byte [10];
  228. sock.Send (b);
  229. }
  230. }
  231. byte[] buf = new byte[100];
  232. [Test]
  233. [ExpectedException (typeof (ObjectDisposedException))]
  234. public void Disposed1 ()
  235. {
  236. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  237. EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
  238. s.Close();
  239. s.ReceiveFrom (buf, ref ep);
  240. }
  241. [Test]
  242. [ExpectedException (typeof (ObjectDisposedException))]
  243. public void Disposed2 ()
  244. {
  245. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  246. s.Close();
  247. s.Blocking = true;
  248. }
  249. [Test]
  250. [ExpectedException (typeof (ObjectDisposedException))]
  251. public void Disposed6 ()
  252. {
  253. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  254. s.Close();
  255. s.Listen (5);
  256. }
  257. [Test]
  258. [ExpectedException (typeof (ObjectDisposedException))]
  259. public void Disposed7 ()
  260. {
  261. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  262. s.Close();
  263. s.Poll (100, 0);
  264. }
  265. [Test]
  266. [ExpectedException (typeof (ObjectDisposedException))]
  267. public void Disposed8 ()
  268. {
  269. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  270. s.Close();
  271. s.Receive (buf);
  272. }
  273. [Test]
  274. [ExpectedException (typeof (ObjectDisposedException))]
  275. public void Disposed9 ()
  276. {
  277. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  278. s.Close();
  279. s.Receive (buf, 0);
  280. }
  281. [Test]
  282. [ExpectedException (typeof (ObjectDisposedException))]
  283. public void Disposed10 ()
  284. {
  285. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  286. s.Close();
  287. s.Receive (buf, 10, 0);
  288. }
  289. [Test]
  290. [ExpectedException (typeof (ObjectDisposedException))]
  291. public void Disposed11 ()
  292. {
  293. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  294. s.Close();
  295. s.Receive (buf, 0, 10, 0);
  296. }
  297. [Test]
  298. [ExpectedException (typeof (ObjectDisposedException))]
  299. public void Disposed12 ()
  300. {
  301. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  302. EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
  303. s.Close();
  304. s.ReceiveFrom (buf, 0, ref ep);
  305. }
  306. [Test]
  307. [ExpectedException (typeof (ObjectDisposedException))]
  308. public void Disposed13 ()
  309. {
  310. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  311. EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
  312. s.Close();
  313. s.ReceiveFrom (buf, 10, 0, ref ep);
  314. }
  315. [Test]
  316. [ExpectedException (typeof (ObjectDisposedException))]
  317. public void Disposed14 ()
  318. {
  319. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  320. EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
  321. s.Close();
  322. s.ReceiveFrom (buf, 0, 10, 0, ref ep);
  323. }
  324. [Test]
  325. [ExpectedException (typeof (ObjectDisposedException))]
  326. public void Disposed15 ()
  327. {
  328. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  329. s.Close();
  330. s.Send (buf);
  331. }
  332. [Test]
  333. [ExpectedException (typeof (ObjectDisposedException))]
  334. public void Disposed16 ()
  335. {
  336. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  337. s.Close();
  338. s.Send (buf, 0);
  339. }
  340. [Test]
  341. [ExpectedException (typeof (ObjectDisposedException))]
  342. public void Disposed17 ()
  343. {
  344. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  345. s.Close();
  346. s.Send (buf, 10, 0);
  347. }
  348. [Test]
  349. [ExpectedException (typeof (ObjectDisposedException))]
  350. public void Disposed18 ()
  351. {
  352. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  353. s.Close();
  354. s.Send (buf, 0, 10, 0);
  355. }
  356. [Test]
  357. [ExpectedException (typeof (ObjectDisposedException))]
  358. public void Disposed19 ()
  359. {
  360. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  361. EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
  362. s.Close();
  363. s.SendTo (buf, 0, ep);
  364. }
  365. [Test]
  366. [ExpectedException (typeof (ObjectDisposedException))]
  367. public void Disposed20 ()
  368. {
  369. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  370. EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
  371. s.Close();
  372. s.SendTo (buf, 10, 0, ep);
  373. }
  374. [Test]
  375. [ExpectedException (typeof (ObjectDisposedException))]
  376. public void Disposed21 ()
  377. {
  378. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  379. EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
  380. s.Close();
  381. s.SendTo (buf, 0, 10, 0, ep);
  382. }
  383. [Test]
  384. [ExpectedException (typeof (ObjectDisposedException))]
  385. public void Disposed22 ()
  386. {
  387. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  388. EndPoint ep = new IPEndPoint (IPAddress.Any, 31337);
  389. s.Close();
  390. s.SendTo (buf, ep);
  391. }
  392. [Test]
  393. [ExpectedException (typeof (ObjectDisposedException))]
  394. public void Disposed23 ()
  395. {
  396. Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  397. s.Close();
  398. s.Shutdown (0);
  399. }
  400. [Test]
  401. public void GetHashCodeTest ()
  402. {
  403. Socket server = new Socket (AddressFamily.InterNetwork,
  404. SocketType.Stream, ProtocolType.Tcp);
  405. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  406. 9010);
  407. server.Bind (ep);
  408. server.Listen (1);
  409. Socket client = new Socket (AddressFamily.InterNetwork,
  410. SocketType.Stream, ProtocolType.Tcp);
  411. int hashcodeA = client.GetHashCode ();
  412. client.Connect (ep);
  413. int hashcodeB = client.GetHashCode ();
  414. Assert.AreEqual (hashcodeA, hashcodeB, "#1");
  415. client.Close ();
  416. int hashcodeC = client.GetHashCode ();
  417. #if NET_2_0
  418. Assert.AreEqual (hashcodeB, hashcodeC, "#2");
  419. #else
  420. Assert.IsFalse (hashcodeB == hashcodeC, "#2");
  421. #endif
  422. server.Close ();
  423. }
  424. static ManualResetEvent SocketError_event = new ManualResetEvent (false);
  425. private static void SocketError_callback (IAsyncResult ar)
  426. {
  427. Socket sock = (Socket)ar.AsyncState;
  428. if(sock.Connected) {
  429. sock.EndConnect (ar);
  430. }
  431. SocketError_event.Set ();
  432. }
  433. [Test]
  434. public void SocketErrorTest ()
  435. {
  436. Socket sock = new Socket (AddressFamily.InterNetwork,
  437. SocketType.Stream,
  438. ProtocolType.Tcp);
  439. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  440. BogusPort);
  441. SocketError_event.Reset ();
  442. sock.Blocking = false;
  443. sock.BeginConnect (ep, new AsyncCallback(SocketError_callback),
  444. sock);
  445. if (SocketError_event.WaitOne (2000, false) == false) {
  446. Assert.Fail ("SocketError wait timed out");
  447. }
  448. Assert.AreEqual (false, sock.Connected, "SocketError #1");
  449. int error;
  450. error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
  451. Assert.AreEqual (10061, error, "SocketError #2");
  452. error = (int)sock.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Error);
  453. Assert.AreEqual (10061, error, "SocketError #3");
  454. sock.Close ();
  455. }
  456. #if NET_2_0
  457. [Test]
  458. public void SocketInformationCtor ()
  459. {
  460. }
  461. [Test]
  462. public void DontFragmentDefaultTcp ()
  463. {
  464. Socket sock = new Socket (AddressFamily.InterNetwork,
  465. SocketType.Stream,
  466. ProtocolType.Tcp);
  467. Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultTcp");
  468. sock.Close ();
  469. }
  470. [Test]
  471. [Category ("NotOnMac")] // DontFragment doesn't work on Mac
  472. public void DontFragmentChangeTcp ()
  473. {
  474. Socket sock = new Socket (AddressFamily.InterNetwork,
  475. SocketType.Stream,
  476. ProtocolType.Tcp);
  477. sock.DontFragment = true;
  478. Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeTcp");
  479. sock.Close ();
  480. }
  481. [Test]
  482. public void DontFragmentDefaultUdp ()
  483. {
  484. Socket sock = new Socket (AddressFamily.InterNetwork,
  485. SocketType.Dgram,
  486. ProtocolType.Udp);
  487. Assert.AreEqual (false, sock.DontFragment, "DontFragmentDefaultUdp");
  488. sock.Close ();
  489. }
  490. [Test]
  491. [Category ("NotOnMac")] // DontFragment doesn't work on Mac
  492. public void DontFragmentChangeUdp ()
  493. {
  494. Socket sock = new Socket (AddressFamily.InterNetwork,
  495. SocketType.Dgram,
  496. ProtocolType.Udp);
  497. sock.DontFragment = true;
  498. Assert.AreEqual (true, sock.DontFragment, "DontFragmentChangeUdp");
  499. sock.Close ();
  500. }
  501. [Test]
  502. [ExpectedException (typeof(ObjectDisposedException))]
  503. public void DontFragmentClosed ()
  504. {
  505. Socket sock = new Socket (AddressFamily.InterNetwork,
  506. SocketType.Stream,
  507. ProtocolType.Tcp);
  508. sock.Close ();
  509. bool val = sock.DontFragment;
  510. }
  511. [Test]
  512. [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
  513. public void DontFragment ()
  514. {
  515. Socket sock = new Socket (AddressFamily.NetBios,
  516. SocketType.Seqpacket,
  517. ProtocolType.Unspecified);
  518. try {
  519. sock.DontFragment = true;
  520. Assert.Fail ("DontFragment #1");
  521. } catch (NotSupportedException) {
  522. } catch {
  523. Assert.Fail ("DontFragment #2");
  524. } finally {
  525. sock.Close ();
  526. }
  527. }
  528. [Test]
  529. public void EnableBroadcastDefaultTcp ()
  530. {
  531. Socket sock = new Socket (AddressFamily.InterNetwork,
  532. SocketType.Stream,
  533. ProtocolType.Tcp);
  534. try {
  535. bool value = sock.EnableBroadcast;
  536. Assert.Fail ("EnableBroadcastDefaultTcp #1");
  537. } catch (SocketException ex) {
  538. Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastDefaultTcp #2");
  539. } catch {
  540. Assert.Fail ("EnableBroadcastDefaultTcp #2");
  541. } finally {
  542. sock.Close ();
  543. }
  544. }
  545. [Test]
  546. public void EnableBroadcastDefaultUdp ()
  547. {
  548. Socket sock = new Socket (AddressFamily.InterNetwork,
  549. SocketType.Dgram,
  550. ProtocolType.Udp);
  551. Assert.AreEqual (false, sock.EnableBroadcast, "EnableBroadcastDefaultUdp");
  552. sock.Close ();
  553. }
  554. [Test]
  555. public void EnableBroadcastChangeTcp ()
  556. {
  557. Socket sock = new Socket (AddressFamily.InterNetwork,
  558. SocketType.Stream,
  559. ProtocolType.Tcp);
  560. try {
  561. sock.EnableBroadcast = true;
  562. Assert.Fail ("EnableBroadcastChangeTcp #1");
  563. } catch (SocketException ex) {
  564. Assert.AreEqual (10042, ex.ErrorCode, "EnableBroadcastChangeTcp #2");
  565. } catch {
  566. Assert.Fail ("EnableBroadcastChangeTcp #2");
  567. } finally {
  568. sock.Close ();
  569. }
  570. }
  571. [Test]
  572. public void EnableBroadcastChangeUdp ()
  573. {
  574. Socket sock = new Socket (AddressFamily.InterNetwork,
  575. SocketType.Dgram,
  576. ProtocolType.Udp);
  577. sock.EnableBroadcast = true;
  578. Assert.AreEqual (true, sock.EnableBroadcast, "EnableBroadcastChangeUdp");
  579. sock.Close ();
  580. }
  581. [Test]
  582. [ExpectedException (typeof(ObjectDisposedException))]
  583. public void EnableBroadcastClosed ()
  584. {
  585. Socket sock = new Socket (AddressFamily.InterNetwork,
  586. SocketType.Dgram,
  587. ProtocolType.Udp);
  588. sock.Close ();
  589. bool val = sock.EnableBroadcast;
  590. }
  591. /* Can't test the default for ExclusiveAddressUse as
  592. * it's different on different versions and service
  593. * packs of windows
  594. */
  595. [Test]
  596. [Category ("NotWorking")] // Not supported on Linux
  597. public void ExclusiveAddressUseUnbound ()
  598. {
  599. Socket sock = new Socket (AddressFamily.InterNetwork,
  600. SocketType.Stream,
  601. ProtocolType.Tcp);
  602. sock.ExclusiveAddressUse = true;
  603. Assert.AreEqual (true, sock.ExclusiveAddressUse, "ExclusiveAddressUseUnbound");
  604. sock.Close ();
  605. }
  606. [Test]
  607. [ExpectedException (typeof(InvalidOperationException))]
  608. [Category ("NotWorking")] // Not supported on Linux
  609. public void ExclusiveAddressUseBound ()
  610. {
  611. Socket sock = new Socket (AddressFamily.InterNetwork,
  612. SocketType.Stream,
  613. ProtocolType.Tcp);
  614. sock.Bind (new IPEndPoint (IPAddress.Any, 1235));
  615. sock.ExclusiveAddressUse = true;
  616. sock.Close ();
  617. }
  618. [Test]
  619. [ExpectedException (typeof(ObjectDisposedException))]
  620. public void ExclusiveAddressUseClosed ()
  621. {
  622. Socket sock = new Socket (AddressFamily.InterNetwork,
  623. SocketType.Stream,
  624. ProtocolType.Tcp);
  625. sock.Close ();
  626. bool val = sock.ExclusiveAddressUse;
  627. }
  628. [Test]
  629. public void IsBoundTcp ()
  630. {
  631. Socket sock = new Socket (AddressFamily.InterNetwork,
  632. SocketType.Stream,
  633. ProtocolType.Tcp);
  634. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  635. BogusPort);
  636. Assert.AreEqual (false, sock.IsBound, "IsBoundTcp #1");
  637. sock.Bind (ep);
  638. Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #2");
  639. sock.Listen (1);
  640. Socket sock2 = new Socket (AddressFamily.InterNetwork,
  641. SocketType.Stream,
  642. ProtocolType.Tcp);
  643. Assert.AreEqual (false, sock2.IsBound, "IsBoundTcp #3");
  644. sock2.Connect (ep);
  645. Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #4");
  646. sock2.Close ();
  647. Assert.AreEqual (true, sock2.IsBound, "IsBoundTcp #5");
  648. sock.Close ();
  649. Assert.AreEqual (true, sock.IsBound, "IsBoundTcp #6");
  650. }
  651. [Test]
  652. public void IsBoundUdp ()
  653. {
  654. Socket sock = new Socket (AddressFamily.InterNetwork,
  655. SocketType.Dgram,
  656. ProtocolType.Udp);
  657. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  658. BogusPort);
  659. Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #1");
  660. sock.Bind (ep);
  661. Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #2");
  662. sock.Close ();
  663. Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #3");
  664. sock = new Socket (AddressFamily.InterNetwork,
  665. SocketType.Dgram,
  666. ProtocolType.Udp);
  667. Assert.AreEqual (false, sock.IsBound, "IsBoundUdp #4");
  668. sock.Connect (ep);
  669. Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #5");
  670. sock.Close ();
  671. Assert.AreEqual (true, sock.IsBound, "IsBoundUdp #6");
  672. }
  673. [Test]
  674. /* Should not throw an exception */
  675. public void IsBoundClosed ()
  676. {
  677. Socket sock = new Socket (AddressFamily.InterNetwork,
  678. SocketType.Stream,
  679. ProtocolType.Tcp);
  680. sock.Close ();
  681. bool val = sock.IsBound;
  682. }
  683. /* Nothing much to test for LingerState */
  684. [Test]
  685. public void MulticastLoopbackDefaultTcp ()
  686. {
  687. Socket sock = new Socket (AddressFamily.InterNetwork,
  688. SocketType.Stream,
  689. ProtocolType.Tcp);
  690. try {
  691. bool value = sock.MulticastLoopback;
  692. Assert.Fail ("MulticastLoopbackDefaultTcp #1");
  693. } catch (SocketException ex) {
  694. Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackDefaultTcp #2");
  695. } catch {
  696. Assert.Fail ("MulticastLoopbackDefaultTcp #2");
  697. } finally {
  698. sock.Close ();
  699. }
  700. }
  701. [Test]
  702. public void MulticastLoopbackChangeTcp ()
  703. {
  704. Socket sock = new Socket (AddressFamily.InterNetwork,
  705. SocketType.Stream,
  706. ProtocolType.Tcp);
  707. try {
  708. sock.MulticastLoopback = false;
  709. Assert.Fail ("MulticastLoopbackChangeTcp #1");
  710. } catch (SocketException ex) {
  711. Assert.AreEqual (10042, ex.ErrorCode, "MulticastLoopbackChangeTcp #2");
  712. } catch {
  713. Assert.Fail ("MulticastLoopbackChangeTcp #2");
  714. } finally {
  715. sock.Close ();
  716. }
  717. }
  718. [Test]
  719. public void MulticastLoopbackDefaultUdp ()
  720. {
  721. Socket sock = new Socket (AddressFamily.InterNetwork,
  722. SocketType.Dgram,
  723. ProtocolType.Udp);
  724. Assert.AreEqual (true, sock.MulticastLoopback, "MulticastLoopbackDefaultUdp");
  725. sock.Close ();
  726. }
  727. [Test]
  728. public void MulticastLoopbackChangeUdp ()
  729. {
  730. Socket sock = new Socket (AddressFamily.InterNetwork,
  731. SocketType.Dgram,
  732. ProtocolType.Udp);
  733. sock.MulticastLoopback = false;
  734. Assert.AreEqual (false, sock.MulticastLoopback, "MulticastLoopbackChangeUdp");
  735. sock.Close ();
  736. }
  737. [Test]
  738. [ExpectedException (typeof(ObjectDisposedException))]
  739. public void MulticastLoopbackClosed ()
  740. {
  741. Socket sock = new Socket (AddressFamily.InterNetwork,
  742. SocketType.Stream,
  743. ProtocolType.Tcp);
  744. sock.Close ();
  745. bool val = sock.MulticastLoopback;
  746. }
  747. /* OSSupportsIPv6 depends on the environment */
  748. [Test]
  749. [Category("NotWorking")] // We have different defaults for perf reasons
  750. public void ReceiveBufferSizeDefault ()
  751. {
  752. Socket sock = new Socket (AddressFamily.InterNetwork,
  753. SocketType.Stream,
  754. ProtocolType.Tcp);
  755. Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefault");
  756. sock.Close ();
  757. }
  758. [Test]
  759. [Category("NotWorking")] // We have different defaults for perf reasons
  760. public void ReceiveBufferSizeDefaultUdp ()
  761. {
  762. Socket sock = new Socket (AddressFamily.InterNetwork,
  763. SocketType.Dgram,
  764. ProtocolType.Udp);
  765. Assert.AreEqual (8192, sock.ReceiveBufferSize, "ReceiveBufferSizeDefaultUdp");
  766. sock.Close ();
  767. }
  768. [Test]
  769. public void ReceiveBufferSizeChange ()
  770. {
  771. Socket sock = new Socket (AddressFamily.InterNetwork,
  772. SocketType.Stream,
  773. ProtocolType.Tcp);
  774. sock.ReceiveBufferSize = 16384;
  775. Assert.AreEqual (16384, sock.ReceiveBufferSize, "ReceiveBufferSizeChange");
  776. sock.Close ();
  777. }
  778. [Test]
  779. [ExpectedException (typeof(ObjectDisposedException))]
  780. public void ReceiveBufferSizeClosed ()
  781. {
  782. Socket sock = new Socket (AddressFamily.InterNetwork,
  783. SocketType.Stream,
  784. ProtocolType.Tcp);
  785. sock.Close ();
  786. int val = sock.ReceiveBufferSize;
  787. }
  788. [Test]
  789. [Category("NotWorking")] // We have different defaults for perf reasons
  790. public void SendBufferSizeDefault ()
  791. {
  792. Socket sock = new Socket (AddressFamily.InterNetwork,
  793. SocketType.Stream,
  794. ProtocolType.Tcp);
  795. Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefault");
  796. sock.Close ();
  797. }
  798. [Test]
  799. [Category("NotWorking")] // We have different defaults for perf reasons
  800. public void SendBufferSizeDefaultUdp ()
  801. {
  802. Socket sock = new Socket (AddressFamily.InterNetwork,
  803. SocketType.Dgram,
  804. ProtocolType.Udp);
  805. Assert.AreEqual (8192, sock.SendBufferSize, "SendBufferSizeDefaultUdp");
  806. sock.Close ();
  807. }
  808. [Test]
  809. public void SendBufferSizeChange ()
  810. {
  811. Socket sock = new Socket (AddressFamily.InterNetwork,
  812. SocketType.Stream,
  813. ProtocolType.Tcp);
  814. sock.SendBufferSize = 16384;
  815. Assert.AreEqual (16384, sock.SendBufferSize, "SendBufferSizeChange");
  816. sock.Close ();
  817. }
  818. [Test]
  819. [ExpectedException (typeof(ObjectDisposedException))]
  820. public void SendBufferSizeClosed ()
  821. {
  822. Socket sock = new Socket (AddressFamily.InterNetwork,
  823. SocketType.Stream,
  824. ProtocolType.Tcp);
  825. sock.Close ();
  826. int val = sock.SendBufferSize;
  827. }
  828. /* No test for TTL default as it's platform dependent */
  829. [Test]
  830. public void TtlChange ()
  831. {
  832. Socket sock = new Socket (AddressFamily.InterNetwork,
  833. SocketType.Stream,
  834. ProtocolType.Tcp);
  835. sock.Ttl = 255;
  836. Assert.AreEqual (255, sock.Ttl, "TtlChange");
  837. sock.Close ();
  838. }
  839. [Test]
  840. [Category ("NotOnMac")] // Mac doesn't throw when overflowing the ttl
  841. public void TtlChangeOverflow ()
  842. {
  843. Socket sock = new Socket (AddressFamily.InterNetwork,
  844. SocketType.Stream,
  845. ProtocolType.Tcp);
  846. try {
  847. sock.Ttl = 256;
  848. Assert.Fail ("TtlChangeOverflow #1");
  849. } catch (SocketException ex) {
  850. Assert.AreEqual (10022, ex.ErrorCode,
  851. "TtlChangeOverflow #2");
  852. } catch {
  853. Assert.Fail ("TtlChangeoverflow #3");
  854. } finally {
  855. sock.Close ();
  856. }
  857. }
  858. /* Apparently you can set TTL=0 on the ms runtime!!
  859. try {
  860. sock.Ttl = 0;
  861. Assert.Fail ("TtlChangeOverflow #4");
  862. } catch (SocketException ex) {
  863. Assert.AreEqual (10022, ex.ErrorCode,
  864. "TtlChangeOverflow #5");
  865. } catch {
  866. Assert.Fail ("TtlChangeOverflow #6");
  867. } finally {
  868. sock.Close ();
  869. }
  870. */
  871. [Test]
  872. [ExpectedException (typeof(ObjectDisposedException))]
  873. public void TtlClosed ()
  874. {
  875. Socket sock = new Socket (AddressFamily.InterNetwork,
  876. SocketType.Stream,
  877. ProtocolType.Tcp);
  878. sock.Close ();
  879. int val = sock.Ttl;
  880. }
  881. [Test]
  882. public void UseOnlyOverlappedIODefault ()
  883. {
  884. Socket sock = new Socket (AddressFamily.InterNetwork,
  885. SocketType.Stream,
  886. ProtocolType.Tcp);
  887. Assert.AreEqual (false, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIODefault");
  888. sock.Close ();
  889. }
  890. //
  891. // We need this because the Linux kernel in certain configurations
  892. // will end up rounding up the values passed on to the kernel
  893. // for socket send/receive timeouts.
  894. //
  895. int Approximate (int target, int value)
  896. {
  897. int epsilon = 10;
  898. if (value > target-10 && value < target+10)
  899. return target;
  900. return value;
  901. }
  902. [Test]
  903. public void UseOnlyOverlappedIOChange ()
  904. {
  905. Socket sock = new Socket (AddressFamily.InterNetwork,
  906. SocketType.Stream,
  907. ProtocolType.Tcp);
  908. sock.UseOnlyOverlappedIO = true;
  909. Assert.AreEqual (true, sock.UseOnlyOverlappedIO, "UseOnlyOverlappedIOChange");
  910. sock.Close ();
  911. }
  912. [Test]
  913. /* Should not throw an exception */
  914. public void UseOnlyOverlappedIOClosed ()
  915. {
  916. Socket sock = new Socket (AddressFamily.InterNetwork,
  917. SocketType.Stream,
  918. ProtocolType.Tcp);
  919. sock.Close ();
  920. bool val = sock.UseOnlyOverlappedIO;
  921. }
  922. [Test]
  923. public void SendTimeoutDefault ()
  924. {
  925. Socket sock = new Socket (AddressFamily.InterNetwork,
  926. SocketType.Stream,
  927. ProtocolType.Tcp);
  928. Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutDefault");
  929. sock.Close ();
  930. }
  931. [Test]
  932. public void SendTimeoutChange ()
  933. {
  934. Socket sock = new Socket (AddressFamily.InterNetwork,
  935. SocketType.Stream,
  936. ProtocolType.Tcp);
  937. /* Should be rounded up to 500, according to
  938. * the MSDN docs, but the MS runtime doesn't
  939. */
  940. sock.SendTimeout = 50;
  941. Assert.AreEqual (50, Approximate (50, sock.SendTimeout), "SendTimeoutChange #1");
  942. sock.SendTimeout = 2000;
  943. Assert.AreEqual (2000, Approximate (2000, sock.SendTimeout), "SendTimeoutChange #2");
  944. sock.SendTimeout = 0;
  945. Assert.AreEqual (0, Approximate (0, sock.SendTimeout), "SendTimeoutChange #3");
  946. /* Should be the same as setting 0 */
  947. sock.SendTimeout = -1;
  948. Assert.AreEqual (0, sock.SendTimeout, "SendTimeoutChange #4");
  949. sock.SendTimeout = 65536;
  950. Assert.AreEqual (65536, Approximate (65536, sock.SendTimeout), "SendTimeoutChange #5");
  951. try {
  952. sock.SendTimeout = -2;
  953. Assert.Fail ("SendTimeoutChange #8");
  954. } catch (ArgumentOutOfRangeException) {
  955. } catch {
  956. Assert.Fail ("SendTimeoutChange #9");
  957. } finally {
  958. sock.Close ();
  959. }
  960. }
  961. [Test]
  962. [ExpectedException (typeof(ObjectDisposedException))]
  963. public void SendTimeoutClosed ()
  964. {
  965. Socket sock = new Socket (AddressFamily.InterNetwork,
  966. SocketType.Stream,
  967. ProtocolType.Tcp);
  968. sock.Close ();
  969. int val = sock.SendTimeout;
  970. }
  971. [Test]
  972. public void ReceiveTimeoutDefault ()
  973. {
  974. Socket sock = new Socket (AddressFamily.InterNetwork,
  975. SocketType.Stream,
  976. ProtocolType.Tcp);
  977. Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutDefault");
  978. sock.Close ();
  979. }
  980. [Test]
  981. public void ReceiveTimeoutChange ()
  982. {
  983. Socket sock = new Socket (AddressFamily.InterNetwork,
  984. SocketType.Stream,
  985. ProtocolType.Tcp);
  986. sock.ReceiveTimeout = 50;
  987. Assert.AreEqual (50, Approximate (50, sock.ReceiveTimeout), "ReceiveTimeoutChange #1");
  988. sock.ReceiveTimeout = 2000;
  989. Assert.AreEqual (2000, Approximate (2000, sock.ReceiveTimeout), "ReceiveTimeoutChange #2");
  990. sock.ReceiveTimeout = 0;
  991. Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #3");
  992. /* Should be the same as setting 0 */
  993. sock.ReceiveTimeout = -1;
  994. Assert.AreEqual (0, sock.ReceiveTimeout, "ReceiveTimeoutChange #4");
  995. sock.ReceiveTimeout = 65536;
  996. Assert.AreEqual (65536, Approximate (65536, sock.ReceiveTimeout), "ReceiveTimeoutChange #5");
  997. try {
  998. sock.ReceiveTimeout = -2;
  999. Assert.Fail ("ReceiveTimeoutChange #8");
  1000. } catch (ArgumentOutOfRangeException) {
  1001. } catch {
  1002. Assert.Fail ("ReceiveTimeoutChange #9");
  1003. } finally {
  1004. sock.Close ();
  1005. }
  1006. }
  1007. [Test]
  1008. [ExpectedException (typeof(ObjectDisposedException))]
  1009. public void ReceiveTimeoutClosed ()
  1010. {
  1011. Socket sock = new Socket (AddressFamily.InterNetwork,
  1012. SocketType.Stream,
  1013. ProtocolType.Tcp);
  1014. sock.Close ();
  1015. int val = sock.ReceiveTimeout;
  1016. }
  1017. [Test]
  1018. public void NoDelayDefaultTcp ()
  1019. {
  1020. Socket sock = new Socket (AddressFamily.InterNetwork,
  1021. SocketType.Stream,
  1022. ProtocolType.Tcp);
  1023. Assert.AreEqual (false, sock.NoDelay, "NoDelayDefaultTcp");
  1024. sock.Close ();
  1025. }
  1026. [Test]
  1027. public void NoDelayChangeTcp ()
  1028. {
  1029. Socket sock = new Socket (AddressFamily.InterNetwork,
  1030. SocketType.Stream,
  1031. ProtocolType.Tcp);
  1032. sock.NoDelay = true;
  1033. Assert.AreEqual (true, sock.NoDelay, "NoDelayChangeTcp");
  1034. sock.Close ();
  1035. }
  1036. [Test]
  1037. public void NoDelayDefaultUdp ()
  1038. {
  1039. Socket sock = new Socket (AddressFamily.InterNetwork,
  1040. SocketType.Dgram,
  1041. ProtocolType.Udp);
  1042. try {
  1043. bool val = sock.NoDelay;
  1044. Assert.Fail ("NoDelayDefaultUdp #1");
  1045. } catch (SocketException ex) {
  1046. Assert.AreEqual (10042, ex.ErrorCode,
  1047. "NoDelayDefaultUdp #2");
  1048. } catch {
  1049. Assert.Fail ("NoDelayDefaultUdp #3");
  1050. } finally {
  1051. sock.Close ();
  1052. }
  1053. }
  1054. [Test]
  1055. public void NoDelayChangeUdp ()
  1056. {
  1057. Socket sock = new Socket (AddressFamily.InterNetwork,
  1058. SocketType.Dgram,
  1059. ProtocolType.Udp);
  1060. try {
  1061. sock.NoDelay = true;
  1062. Assert.Fail ("NoDelayChangeUdp #1");
  1063. } catch (SocketException ex) {
  1064. Assert.AreEqual (10042, ex.ErrorCode,
  1065. "NoDelayChangeUdp #2");
  1066. } catch {
  1067. Assert.Fail ("NoDelayChangeUdp #3");
  1068. } finally {
  1069. sock.Close ();
  1070. }
  1071. }
  1072. [Test]
  1073. [ExpectedException (typeof(ObjectDisposedException))]
  1074. public void NoDelayClosed ()
  1075. {
  1076. Socket sock = new Socket (AddressFamily.InterNetwork,
  1077. SocketType.Stream,
  1078. ProtocolType.Tcp);
  1079. sock.Close ();
  1080. bool val = sock.NoDelay;
  1081. }
  1082. static bool BAAccepted = false;
  1083. static Socket BASocket = null;
  1084. static ManualResetEvent BACalledBack = new ManualResetEvent (false);
  1085. private static void BACallback (IAsyncResult asyncResult)
  1086. {
  1087. Socket sock = (Socket)asyncResult.AsyncState;
  1088. BASocket = sock.EndAccept (asyncResult);
  1089. BAAccepted = true;
  1090. BACalledBack.Set ();
  1091. }
  1092. [Test]
  1093. [ExpectedException (typeof(InvalidOperationException))]
  1094. public void BeginAcceptNotBound ()
  1095. {
  1096. Socket sock = new Socket (AddressFamily.InterNetwork,
  1097. SocketType.Stream,
  1098. ProtocolType.Tcp);
  1099. sock.BeginAccept (BACallback, sock);
  1100. sock.Close ();
  1101. }
  1102. [Test]
  1103. [ExpectedException (typeof(InvalidOperationException))]
  1104. public void BeginAcceptNotListening ()
  1105. {
  1106. Socket sock = new Socket (AddressFamily.InterNetwork,
  1107. SocketType.Stream,
  1108. ProtocolType.Tcp);
  1109. sock.Bind (new IPEndPoint (IPAddress.Any, 1236));
  1110. sock.BeginAccept (BACallback, sock);
  1111. sock.Close ();
  1112. }
  1113. [Test]
  1114. public void BeginAccept ()
  1115. {
  1116. Socket sock = new Socket (AddressFamily.InterNetwork,
  1117. SocketType.Stream,
  1118. ProtocolType.Tcp);
  1119. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  1120. 1237);
  1121. sock.Bind (ep);
  1122. sock.Listen (1);
  1123. BACalledBack.Reset ();
  1124. sock.BeginAccept (BACallback, sock);
  1125. Socket conn = new Socket (AddressFamily.InterNetwork,
  1126. SocketType.Stream,
  1127. ProtocolType.Tcp);
  1128. conn.Connect (ep);
  1129. if (BACalledBack.WaitOne (2000, false) == false) {
  1130. Assert.Fail ("BeginAccept wait timed out");
  1131. }
  1132. Assert.AreEqual (true, BAAccepted, "BeginAccept #1");
  1133. Assert.AreEqual (true, BASocket.Connected, "BeginAccept #2");
  1134. Assert.AreEqual (false, sock.Connected, "BeginAccept #3");
  1135. Assert.AreEqual (true, conn.Connected, "BeginAccept #4");
  1136. BASocket.Close ();
  1137. conn.Close ();
  1138. sock.Close ();
  1139. }
  1140. [Test]
  1141. [ExpectedException (typeof(ObjectDisposedException))]
  1142. public void BeginAcceptClosed ()
  1143. {
  1144. Socket sock = new Socket (AddressFamily.InterNetwork,
  1145. SocketType.Stream,
  1146. ProtocolType.Tcp);
  1147. sock.Close ();
  1148. sock.BeginAccept (BACallback, sock);
  1149. }
  1150. static bool BADAccepted = false;
  1151. static Socket BADSocket = null;
  1152. static byte[] BADBytes;
  1153. static int BADByteCount;
  1154. static ManualResetEvent BADCalledBack = new ManualResetEvent (false);
  1155. private static void BADCallback (IAsyncResult asyncResult)
  1156. {
  1157. Socket sock = (Socket)asyncResult.AsyncState;
  1158. BADSocket = sock.EndAccept (out BADBytes,
  1159. out BADByteCount,
  1160. asyncResult);
  1161. BADAccepted = true;
  1162. BADCalledBack.Set ();
  1163. }
  1164. [Test]
  1165. public void BeginAcceptData ()
  1166. {
  1167. Socket sock = new Socket (AddressFamily.InterNetwork,
  1168. SocketType.Stream,
  1169. ProtocolType.Tcp);
  1170. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  1171. 1238);
  1172. sock.Bind (ep);
  1173. sock.Listen (1);
  1174. BADCalledBack.Reset ();
  1175. sock.BeginAccept (256, BADCallback, sock);
  1176. Socket conn = new Socket (AddressFamily.InterNetwork,
  1177. SocketType.Stream,
  1178. ProtocolType.Tcp);
  1179. byte[] send_bytes = new byte[] {10, 11, 12, 13};
  1180. conn.Connect (ep);
  1181. conn.Send (send_bytes);
  1182. if (BADCalledBack.WaitOne (2000, false) == false) {
  1183. Assert.Fail ("BeginAcceptData wait timed out");
  1184. }
  1185. Assert.AreEqual (true, BADAccepted, "BeginAcceptData #1");
  1186. Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptData #2");
  1187. Assert.AreEqual (false, sock.Connected, "BeginAcceptData #3");
  1188. Assert.AreEqual (true, conn.Connected, "BeginAcceptData #4");
  1189. Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptData #5");
  1190. /* The MS runtime gives the returned data in a
  1191. * much bigger array. TODO: investigate
  1192. * whether it the size correlates to the first
  1193. * parameter in BeginAccept()
  1194. */
  1195. Assert.IsFalse (BADBytes.Length == send_bytes.Length,
  1196. "BeginAcceptData #6");
  1197. for(int i = 0; i < send_bytes.Length; i++) {
  1198. Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptData #" + (i+7).ToString ());
  1199. }
  1200. BADSocket.Close ();
  1201. conn.Close ();
  1202. sock.Close ();
  1203. }
  1204. [Test]
  1205. [ExpectedException (typeof(ObjectDisposedException))]
  1206. public void BeginAcceptDataClosed ()
  1207. {
  1208. Socket sock = new Socket (AddressFamily.InterNetwork,
  1209. SocketType.Stream,
  1210. ProtocolType.Tcp);
  1211. sock.Close ();
  1212. sock.BeginAccept (256, BADCallback, sock);
  1213. }
  1214. [Test]
  1215. public void BeginAcceptSocketUdp ()
  1216. {
  1217. Socket sock = new Socket (AddressFamily.InterNetwork,
  1218. SocketType.Stream,
  1219. ProtocolType.Tcp);
  1220. Socket acc = new Socket (AddressFamily.InterNetwork,
  1221. SocketType.Dgram,
  1222. ProtocolType.Udp);
  1223. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  1224. 1239);
  1225. sock.Bind (ep);
  1226. sock.Listen (1);
  1227. try {
  1228. sock.BeginAccept (acc, 256, BADCallback, sock);
  1229. Assert.Fail ("BeginAcceptSocketUdp #1");
  1230. } catch (SocketException ex) {
  1231. Assert.AreEqual (10022, ex.ErrorCode, "BeginAcceptSocketUdp #2");
  1232. } catch {
  1233. Assert.Fail ("BeginAcceptSocketUdp #3");
  1234. } finally {
  1235. acc.Close ();
  1236. sock.Close ();
  1237. }
  1238. }
  1239. [Test]
  1240. public void BeginAcceptSocketBound ()
  1241. {
  1242. Socket sock = new Socket (AddressFamily.InterNetwork,
  1243. SocketType.Stream,
  1244. ProtocolType.Tcp);
  1245. Socket acc = new Socket (AddressFamily.InterNetwork,
  1246. SocketType.Stream,
  1247. ProtocolType.Tcp);
  1248. IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
  1249. 1240);
  1250. IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
  1251. 1241);
  1252. sock.Bind (ep1);
  1253. sock.Listen (1);
  1254. acc.Bind (ep2);
  1255. try {
  1256. sock.BeginAccept (acc, 256, BADCallback, sock);
  1257. Assert.Fail ("BeginAcceptSocketBound #1");
  1258. } catch (InvalidOperationException) {
  1259. } catch {
  1260. Assert.Fail ("BeginAcceptSocketBound #2");
  1261. } finally {
  1262. acc.Close ();
  1263. sock.Close ();
  1264. }
  1265. }
  1266. [Test]
  1267. public void BeginAcceptSocket ()
  1268. {
  1269. Socket sock = new Socket (AddressFamily.InterNetwork,
  1270. SocketType.Stream,
  1271. ProtocolType.Tcp);
  1272. Socket acc = new Socket (AddressFamily.InterNetwork,
  1273. SocketType.Stream,
  1274. ProtocolType.Tcp);
  1275. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  1276. 1242);
  1277. sock.Bind (ep);
  1278. sock.Listen (1);
  1279. BADCalledBack.Reset ();
  1280. sock.BeginAccept (acc, 256, BADCallback, sock);
  1281. Socket conn = new Socket (AddressFamily.InterNetwork,
  1282. SocketType.Stream,
  1283. ProtocolType.Tcp);
  1284. byte[] send_bytes = new byte[] {10, 11, 12, 13};
  1285. conn.Connect (ep);
  1286. conn.Send (send_bytes);
  1287. if (BADCalledBack.WaitOne (2000, false) == false) {
  1288. Assert.Fail ("BeginAcceptSocket wait timed out");
  1289. }
  1290. Assert.AreEqual (true, BADAccepted, "BeginAcceptSocket #1");
  1291. Assert.AreEqual (true, BADSocket.Connected, "BeginAcceptSocket #2");
  1292. Assert.AreEqual (false, sock.Connected, "BeginAcceptSocket #3");
  1293. Assert.AreEqual (true, conn.Connected, "BeginAcceptSocket #4");
  1294. Assert.AreEqual (send_bytes.Length, BADByteCount, "BeginAcceptSocket #5");
  1295. Assert.AreEqual (AddressFamily.InterNetwork, acc.AddressFamily, "BeginAcceptSocket #6");
  1296. Assert.AreEqual (SocketType.Stream, acc.SocketType, "BeginAcceptSocket #7");
  1297. Assert.AreEqual (ProtocolType.Tcp, acc.ProtocolType, "BeginAcceptSocket #8");
  1298. Assert.AreEqual (conn.LocalEndPoint, acc.RemoteEndPoint, "BeginAcceptSocket #9");
  1299. /* The MS runtime gives the returned data in a
  1300. * much bigger array. TODO: investigate
  1301. * whether it the size correlates to the first
  1302. * parameter in BeginAccept()
  1303. */
  1304. Assert.IsFalse (BADBytes.Length == send_bytes.Length,
  1305. "BeginAcceptSocket #10");
  1306. for(int i = 0; i < send_bytes.Length; i++) {
  1307. Assert.AreEqual (send_bytes[i], BADBytes[i], "BeginAcceptSocket #" + (i+11).ToString ());
  1308. }
  1309. BADSocket.Close ();
  1310. conn.Close ();
  1311. acc.Close ();
  1312. sock.Close ();
  1313. }
  1314. [Test]
  1315. public void BeginAcceptSocketClosed ()
  1316. {
  1317. Socket sock = new Socket (AddressFamily.InterNetwork,
  1318. SocketType.Stream,
  1319. ProtocolType.Tcp);
  1320. Socket acc = new Socket (AddressFamily.InterNetwork,
  1321. SocketType.Stream,
  1322. ProtocolType.Tcp);
  1323. sock.Close ();
  1324. try {
  1325. sock.BeginAccept (acc, 256, BADCallback, null);
  1326. Assert.Fail ("BeginAcceptSocketClosed #1");
  1327. } catch (ObjectDisposedException) {
  1328. } catch {
  1329. Assert.Fail ("BeginAcceptSocketClosed #2");
  1330. } finally {
  1331. acc.Close ();
  1332. }
  1333. }
  1334. [Test]
  1335. public void BeginAcceptSocketAccClosed ()
  1336. {
  1337. Socket sock = new Socket (AddressFamily.InterNetwork,
  1338. SocketType.Stream,
  1339. ProtocolType.Tcp);
  1340. Socket acc = new Socket (AddressFamily.InterNetwork,
  1341. SocketType.Stream,
  1342. ProtocolType.Tcp);
  1343. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  1344. 1243);
  1345. sock.Bind (ep);
  1346. sock.Listen (1);
  1347. acc.Close ();
  1348. BADCalledBack.Reset ();
  1349. try {
  1350. sock.BeginAccept (acc, 256, BADCallback, null);
  1351. Assert.Fail ("BeginAcceptSocketAccClosed #1");
  1352. } catch (ObjectDisposedException) {
  1353. } catch {
  1354. Assert.Fail ("BeginAcceptSocketAccClosed #2");
  1355. } finally {
  1356. sock.Close ();
  1357. }
  1358. }
  1359. static bool BCConnected = false;
  1360. static ManualResetEvent BCCalledBack = new ManualResetEvent (false);
  1361. private static void BCCallback (IAsyncResult asyncResult)
  1362. {
  1363. Socket sock = (Socket)asyncResult.AsyncState;
  1364. sock.EndConnect (asyncResult);
  1365. BCConnected = true;
  1366. BCCalledBack.Set ();
  1367. }
  1368. [Test]
  1369. public void BeginConnectAddressPort ()
  1370. {
  1371. Socket sock = new Socket (AddressFamily.InterNetwork,
  1372. SocketType.Stream,
  1373. ProtocolType.Tcp);
  1374. Socket listen = new Socket (AddressFamily.InterNetwork,
  1375. SocketType.Stream,
  1376. ProtocolType.Tcp);
  1377. IPAddress ip = IPAddress.Loopback;
  1378. IPEndPoint ep = new IPEndPoint (ip, 1244);
  1379. listen.Bind (ep);
  1380. listen.Listen (1);
  1381. BCCalledBack.Reset ();
  1382. BCConnected = false;
  1383. sock.BeginConnect (ip, 1244, BCCallback, sock);
  1384. if (BCCalledBack.WaitOne (2000, false) == false) {
  1385. Assert.Fail ("BeginConnectAddressPort wait timed out");
  1386. }
  1387. Assert.AreEqual (true, BCConnected, "BeginConnectAddressPort #1");
  1388. sock.Close ();
  1389. listen.Close ();
  1390. }
  1391. [Test]
  1392. public void BeginConnectAddressPortNull ()
  1393. {
  1394. Socket sock = new Socket (AddressFamily.InterNetwork,
  1395. SocketType.Stream,
  1396. ProtocolType.Tcp);
  1397. IPAddress ip = null;
  1398. try {
  1399. sock.BeginConnect (ip, 1244, BCCallback,
  1400. sock);
  1401. Assert.Fail ("BeginConnectAddressPortNull #1");
  1402. } catch (ArgumentNullException) {
  1403. } catch {
  1404. Assert.Fail ("BeginConnectAddressPortNull #2");
  1405. } finally {
  1406. sock.Close ();
  1407. }
  1408. }
  1409. [Test]
  1410. public void BeginConnectAddressPortListen ()
  1411. {
  1412. Socket sock = new Socket (AddressFamily.InterNetwork,
  1413. SocketType.Stream,
  1414. ProtocolType.Tcp);
  1415. IPAddress ip = IPAddress.Loopback;
  1416. IPEndPoint ep = new IPEndPoint (ip, 1245);
  1417. sock.Bind (ep);
  1418. sock.Listen (1);
  1419. try {
  1420. sock.BeginConnect (ip, 1245, BCCallback, sock);
  1421. Assert.Fail ("BeginConnectAddressPortListen #1");
  1422. } catch (InvalidOperationException) {
  1423. } catch {
  1424. Assert.Fail ("BeginConnectAddressPortListen #2");
  1425. } finally {
  1426. sock.Close ();
  1427. }
  1428. }
  1429. [Test]
  1430. [ExpectedException (typeof(ObjectDisposedException))]
  1431. public void BeginConnectAddressPortClosed ()
  1432. {
  1433. Socket sock = new Socket (AddressFamily.InterNetwork,
  1434. SocketType.Stream,
  1435. ProtocolType.Tcp);
  1436. IPAddress ip = IPAddress.Loopback;
  1437. sock.Close ();
  1438. sock.BeginConnect (ip, 1244, BCCallback, sock);
  1439. }
  1440. [Test]
  1441. [Category ("NotOnMac")] // MacOSX will block attempting to connect to 127.0.0.4 causing the test to fail
  1442. public void BeginConnectMultiple ()
  1443. {
  1444. Socket sock = new Socket (AddressFamily.InterNetwork,
  1445. SocketType.Stream,
  1446. ProtocolType.Tcp);
  1447. Socket listen = new Socket (AddressFamily.InterNetwork,
  1448. SocketType.Stream,
  1449. ProtocolType.Tcp);
  1450. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  1451. 1246);
  1452. IPAddress[] ips = new IPAddress[4];
  1453. ips[0] = IPAddress.Parse ("127.0.0.4");
  1454. ips[1] = IPAddress.Parse ("127.0.0.3");
  1455. ips[2] = IPAddress.Parse ("127.0.0.2");
  1456. ips[3] = IPAddress.Parse ("127.0.0.1");
  1457. listen.Bind (ep);
  1458. listen.Listen (1);
  1459. BCCalledBack.Reset ();
  1460. BCConnected = false;
  1461. sock.BeginConnect (ips, 1246, BCCallback, sock);
  1462. /* Longer wait here, because the ms runtime
  1463. * takes a lot longer to not connect
  1464. */
  1465. if (BCCalledBack.WaitOne (10000, false) == false) {
  1466. Assert.Fail ("BeginConnectMultiple wait failed");
  1467. }
  1468. Assert.AreEqual (true, BCConnected, "BeginConnectMultiple #1");
  1469. Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "BeginConnectMultiple #2");
  1470. IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
  1471. Assert.AreEqual (IPAddress.Loopback, remep.Address, "BeginConnectMultiple #2");
  1472. sock.Close ();
  1473. listen.Close ();
  1474. }
  1475. [Test]
  1476. public void BeginConnectMultipleNull ()
  1477. {
  1478. Socket sock = new Socket (AddressFamily.InterNetwork,
  1479. SocketType.Stream,
  1480. ProtocolType.Tcp);
  1481. IPAddress[] ips = null;
  1482. try {
  1483. sock.BeginConnect (ips, 1246, BCCallback,
  1484. sock);
  1485. Assert.Fail ("BeginConnectMultipleNull #1");
  1486. } catch (ArgumentNullException) {
  1487. } catch {
  1488. Assert.Fail ("BeginConnectMultipleNull #2");
  1489. } finally {
  1490. sock.Close ();
  1491. }
  1492. }
  1493. [Test]
  1494. public void BeginConnectMultipleListen ()
  1495. {
  1496. Socket sock = new Socket (AddressFamily.InterNetwork,
  1497. SocketType.Stream,
  1498. ProtocolType.Tcp);
  1499. IPAddress[] ips = new IPAddress[4];
  1500. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  1501. 1247);
  1502. ips[0] = IPAddress.Parse ("127.0.0.4");
  1503. ips[1] = IPAddress.Parse ("127.0.0.3");
  1504. ips[2] = IPAddress.Parse ("127.0.0.2");
  1505. ips[3] = IPAddress.Parse ("127.0.0.1");
  1506. sock.Bind (ep);
  1507. sock.Listen (1);
  1508. try {
  1509. sock.BeginConnect (ips, 1247, BCCallback,
  1510. sock);
  1511. Assert.Fail ("BeginConnectMultipleListen #1");
  1512. } catch (InvalidOperationException) {
  1513. } catch {
  1514. Assert.Fail ("BeginConnectMultipleListen #2");
  1515. } finally {
  1516. sock.Close ();
  1517. }
  1518. }
  1519. [Test]
  1520. [ExpectedException (typeof(ObjectDisposedException))]
  1521. public void BeginConnectMultipleClosed ()
  1522. {
  1523. Socket sock = new Socket (AddressFamily.InterNetwork,
  1524. SocketType.Stream,
  1525. ProtocolType.Tcp);
  1526. IPAddress[] ips = new IPAddress[4];
  1527. ips[0] = IPAddress.Parse ("127.0.0.4");
  1528. ips[1] = IPAddress.Parse ("127.0.0.3");
  1529. ips[2] = IPAddress.Parse ("127.0.0.2");
  1530. ips[3] = IPAddress.Parse ("127.0.0.1");
  1531. sock.Close ();
  1532. sock.BeginConnect (ips, 1247, BCCallback, sock);
  1533. }
  1534. [Test]
  1535. public void BeginConnectHostPortNull ()
  1536. {
  1537. Socket sock = new Socket (AddressFamily.InterNetwork,
  1538. SocketType.Stream,
  1539. ProtocolType.Tcp);
  1540. try {
  1541. sock.BeginConnect ((string)null, 0,
  1542. BCCallback, sock);
  1543. Assert.Fail ("BeginConnectHostPort #1");
  1544. } catch (ArgumentNullException) {
  1545. } catch {
  1546. Assert.Fail ("BeginConnectHostPort #2");
  1547. } finally {
  1548. sock.Close ();
  1549. }
  1550. }
  1551. [Test]
  1552. public void BeginConnectHostPortListen ()
  1553. {
  1554. Socket sock = new Socket (AddressFamily.InterNetwork,
  1555. SocketType.Stream,
  1556. ProtocolType.Tcp);
  1557. IPAddress ip = IPAddress.Loopback;
  1558. IPEndPoint ep = new IPEndPoint (ip, 1248);
  1559. sock.Bind (ep);
  1560. sock.Listen (1);
  1561. try {
  1562. sock.BeginConnect ("localhost", 1248,
  1563. BCCallback, sock);
  1564. Assert.Fail ("BeginConnectHostPortListen #1");
  1565. } catch (InvalidOperationException) {
  1566. } catch {
  1567. Assert.Fail ("BeginConnectHostPortListen #2");
  1568. } finally {
  1569. sock.Close ();
  1570. }
  1571. }
  1572. [Test]
  1573. [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
  1574. public void BeginConnectHostPortNotIP ()
  1575. {
  1576. Socket sock = new Socket (AddressFamily.NetBios,
  1577. SocketType.Seqpacket,
  1578. ProtocolType.Unspecified);
  1579. try {
  1580. sock.BeginConnect ("localhost", 0, BCCallback,
  1581. sock);
  1582. Assert.Fail ("BeginConnectHostPortNotIP #1");
  1583. } catch (NotSupportedException) {
  1584. } catch {
  1585. Assert.Fail ("BeginConnectHostPortNotIP #2");
  1586. } finally {
  1587. sock.Close ();
  1588. }
  1589. }
  1590. [Test]
  1591. [ExpectedException (typeof(ObjectDisposedException))]
  1592. public void BeginConnectHostPortClosed ()
  1593. {
  1594. Socket sock = new Socket (AddressFamily.InterNetwork,
  1595. SocketType.Stream,
  1596. ProtocolType.Tcp);
  1597. sock.Close ();
  1598. sock.BeginConnect ("localhost", 0, BCCallback, sock);
  1599. }
  1600. static bool BDDisconnected = false;
  1601. static ManualResetEvent BDCalledBack = new ManualResetEvent (false);
  1602. private static void BDCallback (IAsyncResult asyncResult)
  1603. {
  1604. Socket sock = (Socket)asyncResult.AsyncState;
  1605. sock.EndDisconnect (asyncResult);
  1606. BDDisconnected = true;
  1607. BDCalledBack.Set ();
  1608. }
  1609. [Test]
  1610. [Category ("NotDotNet")] // "Needs XP or later"
  1611. public void BeginDisconnect ()
  1612. {
  1613. Socket sock = new Socket (AddressFamily.InterNetwork,
  1614. SocketType.Stream,
  1615. ProtocolType.Tcp);
  1616. Socket listen = new Socket (AddressFamily.InterNetwork,
  1617. SocketType.Stream,
  1618. ProtocolType.Tcp);
  1619. IPAddress ip = IPAddress.Loopback;
  1620. IPEndPoint ep = new IPEndPoint (ip, 1254);
  1621. listen.Bind (ep);
  1622. listen.Listen (1);
  1623. sock.Connect (ip, 1254);
  1624. Assert.AreEqual (true, sock.Connected, "BeginDisconnect #1");
  1625. sock.Shutdown (SocketShutdown.Both);
  1626. BDCalledBack.Reset ();
  1627. BDDisconnected = false;
  1628. sock.BeginDisconnect (false, BDCallback, sock);
  1629. if (BDCalledBack.WaitOne (2000, false) == false) {
  1630. Assert.Fail ("BeginDisconnect wait timed out");
  1631. }
  1632. Assert.AreEqual (true, BDDisconnected, "BeginDisconnect #2");
  1633. Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
  1634. sock.Close ();
  1635. listen.Close ();
  1636. }
  1637. [Test]
  1638. public void BeginReceiveSocketError ()
  1639. {
  1640. }
  1641. [Test]
  1642. public void BeginReceiveGeneric ()
  1643. {
  1644. }
  1645. [Test]
  1646. public void BeginReceiveGenericSocketError ()
  1647. {
  1648. }
  1649. private static void BSCallback (IAsyncResult asyncResult)
  1650. {
  1651. Socket sock = (Socket)asyncResult.AsyncState;
  1652. sock.EndSend (asyncResult);
  1653. }
  1654. [Test]
  1655. public void BeginSendNotConnected ()
  1656. {
  1657. Socket sock = new Socket (AddressFamily.InterNetwork,
  1658. SocketType.Stream,
  1659. ProtocolType.Tcp);
  1660. byte[] send_bytes = new byte[] {10, 11, 12, 13};
  1661. try {
  1662. sock.BeginSend (send_bytes, 0,
  1663. send_bytes.Length,
  1664. SocketFlags.None, BSCallback,
  1665. sock);
  1666. Assert.Fail ("BeginSendNotConnected #1");
  1667. } catch (SocketException ex) {
  1668. Assert.AreEqual (10057, ex.ErrorCode, "BeginSendNotConnected #2");
  1669. } catch {
  1670. Assert.Fail ("BeginSendNotConnected #3");
  1671. } finally {
  1672. sock.Close ();
  1673. }
  1674. }
  1675. [Test]
  1676. public void BeginSendSocketError ()
  1677. {
  1678. }
  1679. [Test]
  1680. public void BeginSendGeneric ()
  1681. {
  1682. }
  1683. [Test]
  1684. public void BeginSendGenericSocketError ()
  1685. {
  1686. }
  1687. [Test]
  1688. public void BindTwice ()
  1689. {
  1690. Socket sock = new Socket (AddressFamily.InterNetwork,
  1691. SocketType.Stream,
  1692. ProtocolType.Tcp);
  1693. IPEndPoint ep1 = new IPEndPoint (IPAddress.Loopback,
  1694. 1256);
  1695. IPEndPoint ep2 = new IPEndPoint (IPAddress.Loopback,
  1696. 1257);
  1697. sock.Bind (ep1);
  1698. try {
  1699. sock.Bind (ep2);
  1700. Assert.Fail ("BindTwice #1");
  1701. } catch (SocketException ex) {
  1702. Assert.AreEqual (10022, ex.ErrorCode, "BindTwice #2");
  1703. } catch {
  1704. Assert.Fail ("BindTwice #3");
  1705. } finally {
  1706. sock.Close ();
  1707. }
  1708. }
  1709. [Test]
  1710. public void Close ()
  1711. {
  1712. Socket sock = new Socket (AddressFamily.InterNetwork,
  1713. SocketType.Stream,
  1714. ProtocolType.Tcp);
  1715. Socket listen = new Socket (AddressFamily.InterNetwork,
  1716. SocketType.Stream,
  1717. ProtocolType.Tcp);
  1718. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  1719. 1258);
  1720. listen.Bind (ep);
  1721. listen.Listen (1);
  1722. sock.Connect (ep);
  1723. Assert.AreEqual (true, sock.Connected, "Close #1");
  1724. sock.Close (2);
  1725. Thread.Sleep (3000);
  1726. Assert.AreEqual (false, sock.Connected, "Close #2");
  1727. listen.Close ();
  1728. }
  1729. [Test]
  1730. public void ConnectAddressPort ()
  1731. {
  1732. Socket sock = new Socket (AddressFamily.InterNetwork,
  1733. SocketType.Stream,
  1734. ProtocolType.Tcp);
  1735. Socket listen = new Socket (AddressFamily.InterNetwork,
  1736. SocketType.Stream,
  1737. ProtocolType.Tcp);
  1738. IPAddress ip = IPAddress.Loopback;
  1739. IPEndPoint ep = new IPEndPoint (ip, 1249);
  1740. listen.Bind (ep);
  1741. listen.Listen (1);
  1742. sock.Connect (ip, 1249);
  1743. Assert.AreEqual (true, sock.Connected, "ConnectAddressPort #1");
  1744. sock.Close ();
  1745. listen.Close ();
  1746. }
  1747. [Test]
  1748. public void ConnectAddressPortNull ()
  1749. {
  1750. Socket sock = new Socket (AddressFamily.InterNetwork,
  1751. SocketType.Stream,
  1752. ProtocolType.Tcp);
  1753. IPAddress ip = null;
  1754. try {
  1755. sock.Connect (ip, 1249);
  1756. Assert.Fail ("ConnectAddressPortNull #1");
  1757. } catch (ArgumentNullException) {
  1758. } catch {
  1759. Assert.Fail ("ConnectAddressPortNull #2");
  1760. } finally {
  1761. sock.Close ();
  1762. }
  1763. }
  1764. [Test]
  1765. public void ConnectAddressPortListen ()
  1766. {
  1767. Socket sock = new Socket (AddressFamily.InterNetwork,
  1768. SocketType.Stream,
  1769. ProtocolType.Tcp);
  1770. IPAddress ip = IPAddress.Loopback;
  1771. IPEndPoint ep = new IPEndPoint (ip, 1250);
  1772. sock.Bind (ep);
  1773. sock.Listen (1);
  1774. try {
  1775. sock.Connect (ip, 1250);
  1776. Assert.Fail ("ConnectAddressPortListen #1");
  1777. } catch (InvalidOperationException) {
  1778. } catch {
  1779. Assert.Fail ("ConnectAddressPortListen #2");
  1780. } finally {
  1781. sock.Close ();
  1782. }
  1783. }
  1784. [Test]
  1785. [ExpectedException (typeof(ObjectDisposedException))]
  1786. public void ConnectAddressPortClosed ()
  1787. {
  1788. Socket sock = new Socket (AddressFamily.InterNetwork,
  1789. SocketType.Stream,
  1790. ProtocolType.Tcp);
  1791. IPAddress ip = IPAddress.Loopback;
  1792. sock.Close ();
  1793. sock.Connect (ip, 1250);
  1794. }
  1795. [Test]
  1796. [Category ("NotOnMac")] // MacOSX trashes the fd after the failed connect attempt to 127.0.0.4
  1797. public void ConnectMultiple ()
  1798. {
  1799. Socket sock = new Socket (AddressFamily.InterNetwork,
  1800. SocketType.Stream,
  1801. ProtocolType.Tcp);
  1802. Socket listen = new Socket (AddressFamily.InterNetwork,
  1803. SocketType.Stream,
  1804. ProtocolType.Tcp);
  1805. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  1806. 1251);
  1807. IPAddress[] ips = new IPAddress[4];
  1808. ips[0] = IPAddress.Parse ("127.0.0.4");
  1809. ips[1] = IPAddress.Parse ("127.0.0.3");
  1810. ips[2] = IPAddress.Parse ("127.0.0.2");
  1811. ips[3] = IPAddress.Parse ("127.0.0.1");
  1812. listen.Bind (ep);
  1813. listen.Listen (1);
  1814. sock.Connect (ips, 1251);
  1815. Assert.AreEqual (true, sock.Connected, "ConnectMultiple #1");
  1816. Assert.AreEqual (AddressFamily.InterNetwork, sock.RemoteEndPoint.AddressFamily, "ConnectMultiple #2");
  1817. IPEndPoint remep = (IPEndPoint)sock.RemoteEndPoint;
  1818. Assert.AreEqual (IPAddress.Loopback, remep.Address, "ConnectMultiple #2");
  1819. sock.Close ();
  1820. listen.Close ();
  1821. }
  1822. [Test]
  1823. public void ConnectMultipleNull ()
  1824. {
  1825. Socket sock = new Socket (AddressFamily.InterNetwork,
  1826. SocketType.Stream,
  1827. ProtocolType.Tcp);
  1828. IPAddress[] ips = null;
  1829. try {
  1830. sock.Connect (ips, 1251);
  1831. Assert.Fail ("ConnectMultipleNull #1");
  1832. } catch (ArgumentNullException) {
  1833. } catch {
  1834. Assert.Fail ("ConnectMultipleNull #2");
  1835. } finally {
  1836. sock.Close ();
  1837. }
  1838. }
  1839. [Test]
  1840. public void ConnectMultipleListen ()
  1841. {
  1842. Socket sock = new Socket (AddressFamily.InterNetwork,
  1843. SocketType.Stream,
  1844. ProtocolType.Tcp);
  1845. IPAddress[] ips = new IPAddress[4];
  1846. IPEndPoint ep = new IPEndPoint (IPAddress.Loopback,
  1847. 1252);
  1848. ips[0] = IPAddress.Parse ("127.0.0.4");
  1849. ips[1] = IPAddress.Parse ("127.0.0.3");
  1850. ips[2] = IPAddress.Parse ("127.0.0.2");
  1851. ips[3] = IPAddress.Parse ("127.0.0.1");
  1852. sock.Bind (ep);
  1853. sock.Listen (1);
  1854. try {
  1855. sock.Connect (ips, 1252);
  1856. Assert.Fail ("ConnectMultipleListen #1");
  1857. } catch (InvalidOperationException) {
  1858. } catch {
  1859. Assert.Fail ("ConnectMultipleListen #2");
  1860. } finally {
  1861. sock.Close ();
  1862. }
  1863. }
  1864. [Test]
  1865. [ExpectedException (typeof(ObjectDisposedException))]
  1866. public void ConnectMultipleClosed ()
  1867. {
  1868. Socket sock = new Socket (AddressFamily.InterNetwork,
  1869. SocketType.Stream,
  1870. ProtocolType.Tcp);
  1871. IPAddress[] ips = new IPAddress[4];
  1872. ips[0] = IPAddress.Parse ("127.0.0.4");
  1873. ips[1] = IPAddress.Parse ("127.0.0.3");
  1874. ips[2] = IPAddress.Parse ("127.0.0.2");
  1875. ips[3] = IPAddress.Parse ("127.0.0.1");
  1876. sock.Close ();
  1877. sock.Connect (ips, 1252);
  1878. }
  1879. [Test]
  1880. public void ConnectHostPortNull ()
  1881. {
  1882. Socket sock = new Socket (AddressFamily.InterNetwork,
  1883. SocketType.Stream,
  1884. ProtocolType.Tcp);
  1885. try {
  1886. sock.Connect ((string)null, 0);
  1887. Assert.Fail ("ConnectHostPort #1");
  1888. } catch (ArgumentNullException) {
  1889. } catch {
  1890. Assert.Fail ("ConnectHostPort #2");
  1891. } finally {
  1892. sock.Close ();
  1893. }
  1894. }
  1895. [Test]
  1896. public void ConnectHostPortListen ()
  1897. {
  1898. Socket sock = new Socket (AddressFamily.InterNetwork,
  1899. SocketType.Stream,
  1900. ProtocolType.Tcp);
  1901. IPAddress ip = IPAddress.Loopback;
  1902. IPEndPoint ep = new IPEndPoint (ip, 1253);
  1903. sock.Bind (ep);
  1904. sock.Listen (1);
  1905. try {
  1906. sock.Connect ("localhost", 1253);
  1907. Assert.Fail ("ConnectHostPortListen #1");
  1908. } catch (InvalidOperationException) {
  1909. } catch {
  1910. Assert.Fail ("ConnectHostPortListen #2");
  1911. } finally {
  1912. sock.Close ();
  1913. }
  1914. }
  1915. [Test]
  1916. [Category ("NotWorking")] // Need to pick a non-IP AddressFamily that "works" on both mono and ms, this one only works on ms
  1917. public void ConnectHostPortNotIP ()
  1918. {
  1919. Socket sock = new Socket (AddressFamily.NetBios,
  1920. SocketType.Seqpacket,
  1921. ProtocolType.Unspecified);
  1922. try {
  1923. sock.Connect ("localhost", 0);
  1924. Assert.Fail ("ConnectHostPortNotIP #1");
  1925. } catch (NotSupportedException) {
  1926. } catch {
  1927. Assert.Fail ("ConnectHostPortNotIP #2");
  1928. } finally {
  1929. sock.Close ();
  1930. }
  1931. }
  1932. [Test]
  1933. [ExpectedException (typeof(ObjectDisposedException))]
  1934. public void ConnectHostPortClosed ()
  1935. {
  1936. Socket sock = new Socket (AddressFamily.InterNetwork,
  1937. SocketType.Stream,
  1938. ProtocolType.Tcp);
  1939. sock.Close ();
  1940. sock.Connect ("localhost", 0);
  1941. }
  1942. [Test]
  1943. [Category ("NotDotNet")] // "Needs XP or later"
  1944. public void Disconnect ()
  1945. {
  1946. Socket sock = new Socket (AddressFamily.InterNetwork,
  1947. SocketType.Stream,
  1948. ProtocolType.Tcp);
  1949. Socket listen = new Socket (AddressFamily.InterNetwork,
  1950. SocketType.Stream,
  1951. ProtocolType.Tcp);
  1952. IPAddress ip = IPAddress.Loopback;
  1953. IPEndPoint ep = new IPEndPoint (ip, 1255);
  1954. listen.Bind (ep);
  1955. listen.Listen (1);
  1956. sock.Connect (ip, 1255);
  1957. Assert.AreEqual (true, sock.Connected, "Disconnect #1");
  1958. sock.Shutdown (SocketShutdown.Both);
  1959. sock.Disconnect (false);
  1960. Assert.AreEqual (false, sock.Connected, "BeginDisconnect #3");
  1961. sock.Close ();
  1962. listen.Close ();
  1963. }
  1964. [Test]
  1965. public void DuplicateAndClose ()
  1966. {
  1967. }
  1968. [Test]
  1969. public void IOControl ()
  1970. {
  1971. }
  1972. [Test]
  1973. public void ReceiveGeneric ()
  1974. {
  1975. int i;
  1976. IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1258);
  1977. Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  1978. listensock.Bind (endpoint);
  1979. listensock.Listen(1);
  1980. Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  1981. sendsock.Connect(endpoint);
  1982. Socket clientsock = listensock.Accept();
  1983. byte[] sendbuf = new byte[256];
  1984. for(i = 0; i < 256; i++) {
  1985. sendbuf[i] = (byte)i;
  1986. }
  1987. for (i = 4; i < 6; i++) {
  1988. Assert.AreEqual (sendbuf[i], (byte)i,
  1989. "#1/" + i.ToString());
  1990. }
  1991. SocketError err;
  1992. sendsock.Send (sendbuf, 0, 256, SocketFlags.None,
  1993. out err);
  1994. byte[] recvbuf = new byte[256];
  1995. List<ArraySegment<byte>> recvbuflist = new List<ArraySegment<byte>>(2);
  1996. recvbuflist.Add(new ArraySegment<byte>(recvbuf, 4, 2));
  1997. recvbuflist.Add(new ArraySegment<byte>(recvbuf, 20, 230));
  1998. clientsock.Receive (recvbuflist);
  1999. /* recvbuf should now hold the first 2 bytes
  2000. * of sendbuf from pos 4, and the next 230
  2001. * bytes of sendbuf from pos 20
  2002. */
  2003. for (i = 0; i < 2; i++) {
  2004. Assert.AreEqual (sendbuf[i], recvbuf[i + 4],
  2005. "#2/" + i.ToString());
  2006. }
  2007. for (i = 2; i < 232; i++) {
  2008. Assert.AreEqual (sendbuf[i], recvbuf[i + 18],
  2009. "#2/" + i.ToString());
  2010. }
  2011. sendsock.Close ();
  2012. clientsock.Close ();
  2013. listensock.Close ();
  2014. }
  2015. [Test]
  2016. public void SendGeneric ()
  2017. {
  2018. int i;
  2019. IPEndPoint endpoint = new IPEndPoint(IPAddress.Loopback, 1259);
  2020. Socket listensock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2021. listensock.Bind (endpoint);
  2022. listensock.Listen(1);
  2023. Socket sendsock = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2024. sendsock.Connect(endpoint);
  2025. Socket clientsock = listensock.Accept();
  2026. byte[] sendbuf = new byte[256];
  2027. List<ArraySegment<byte>> sendbuflist = new List<ArraySegment<byte>>(2);
  2028. sendbuflist.Add(new ArraySegment<byte>(sendbuf, 4, 2));
  2029. sendbuflist.Add(new ArraySegment<byte>(sendbuf, 20, 230));
  2030. for(i = 0; i < 256; i++) {
  2031. sendbuf[i] = (byte)i;
  2032. }
  2033. for (i = 4; i < 6; i++) {
  2034. Assert.AreEqual (sendbuf[i], (byte)i,
  2035. "#1/" + i.ToString());
  2036. }
  2037. SocketError err;
  2038. sendsock.Send (sendbuflist, SocketFlags.None, out err);
  2039. byte[] recvbuf = new byte[256];
  2040. clientsock.Receive (recvbuf);
  2041. /* The first 2 bytes of recvbuf should now
  2042. * hold 2 bytes of sendbuf from pos 4, and the
  2043. * next 230 bytes of recvbuf should be sendbuf
  2044. * from pos 20
  2045. */
  2046. for (i = 0; i < 2; i++) {
  2047. Assert.AreEqual (recvbuf[i], sendbuf[i + 4],
  2048. "#2/" + i.ToString());
  2049. }
  2050. for (i = 2; i < 232; i++) {
  2051. Assert.AreEqual (recvbuf[i], sendbuf[i + 18],
  2052. "#2/" + i.ToString());
  2053. }
  2054. sendsock.Close ();
  2055. clientsock.Close ();
  2056. listensock.Close ();
  2057. }
  2058. [Test]
  2059. public void ListenNotBound ()
  2060. {
  2061. Socket sock = new Socket (AddressFamily.InterNetwork,
  2062. SocketType.Stream,
  2063. ProtocolType.Tcp);
  2064. try {
  2065. sock.Listen (1);
  2066. Assert.Fail ("ListenNotBound #1");
  2067. } catch (SocketException ex) {
  2068. Assert.AreEqual (10022, ex.ErrorCode, "ListenNotBound #2");
  2069. } catch {
  2070. Assert.Fail ("ListenNotBound #3");
  2071. } finally {
  2072. sock.Close ();
  2073. }
  2074. }
  2075. #endif
  2076. static Socket CWRSocket;
  2077. static bool CWRReceiving = true;
  2078. static ManualResetEvent CWRReady = new ManualResetEvent (false);
  2079. private static void CWRReceiveThread ()
  2080. {
  2081. byte[] buf = new byte[256];
  2082. try {
  2083. CWRSocket.Receive (buf);
  2084. } catch (SocketException) {
  2085. CWRReceiving = false;
  2086. }
  2087. CWRReady.Set ();
  2088. }
  2089. [Test]
  2090. public void CloseWhileReceiving ()
  2091. {
  2092. CWRSocket = new Socket (AddressFamily.InterNetwork,
  2093. SocketType.Dgram,
  2094. ProtocolType.Udp);
  2095. CWRSocket.Bind (new IPEndPoint (IPAddress.Loopback,
  2096. 1256));
  2097. Thread recv_thread = new Thread (new ThreadStart (CWRReceiveThread));
  2098. CWRReady.Reset ();
  2099. recv_thread.Start ();
  2100. Thread.Sleep (250); /* Wait for the thread to be already receiving */
  2101. CWRSocket.Close ();
  2102. if (CWRReady.WaitOne (1000, false) == false) {
  2103. Assert.Fail ("CloseWhileReceiving wait timed out");
  2104. }
  2105. Assert.IsFalse (CWRReceiving);
  2106. }
  2107. static bool RRCLastRead = false;
  2108. static ManualResetEvent RRCReady = new ManualResetEvent (false);
  2109. private static void RRCClientThread ()
  2110. {
  2111. byte[] bytes = new byte[8];
  2112. int readbyte;
  2113. Socket sock = new Socket (AddressFamily.InterNetwork,
  2114. SocketType.Stream,
  2115. ProtocolType.Tcp);
  2116. sock.Connect (new IPEndPoint (IPAddress.Loopback,
  2117. 1257));
  2118. NetworkStream stream = new NetworkStream (sock);
  2119. readbyte = stream.ReadByte ();
  2120. Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #1");
  2121. stream.Read (bytes, 0, 0);
  2122. readbyte = stream.ReadByte ();
  2123. Assert.AreEqual (0, readbyte, "ReceiveRemoteClosed #2");
  2124. stream.Read (bytes, 0, 0);
  2125. readbyte = stream.ReadByte ();
  2126. Assert.AreEqual (-1, readbyte, "ReceiveRemoteClosed #3");
  2127. sock.Close ();
  2128. RRCLastRead = true;
  2129. RRCReady.Set ();
  2130. }
  2131. [Test]
  2132. public void ReceiveRemoteClosed ()
  2133. {
  2134. Socket sock = new Socket (AddressFamily.InterNetwork,
  2135. SocketType.Stream,
  2136. ProtocolType.Tcp);
  2137. sock.Bind (new IPEndPoint (IPAddress.Loopback, 1257));
  2138. sock.Listen (1);
  2139. RRCReady.Reset ();
  2140. Thread client_thread = new Thread (new ThreadStart (RRCClientThread));
  2141. client_thread.Start ();
  2142. Socket client = sock.Accept ();
  2143. NetworkStream stream = new NetworkStream (client);
  2144. stream.WriteByte (0x00);
  2145. stream.WriteByte (0x00);
  2146. client.Close ();
  2147. sock.Close ();
  2148. RRCReady.WaitOne (1000, false);
  2149. Assert.IsTrue (RRCLastRead);
  2150. }
  2151. //
  2152. // Test case for bug #471580
  2153. [Test]
  2154. public void UdpDoubleBind ()
  2155. {
  2156. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  2157. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
  2158. s.Bind (new IPEndPoint (IPAddress.Any, 12345));
  2159. Socket ss = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  2160. ss.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
  2161. ss.Bind (new IPEndPoint (IPAddress.Any, 12345));
  2162. // If we make it this far, we succeeded.
  2163. ss.Close ();
  2164. s.Close ();
  2165. }
  2166. #if NET_2_0
  2167. [Test]
  2168. public void ConnectedProperty ()
  2169. {
  2170. TcpListener listener = new TcpListener (IPAddress.Loopback, 23456);
  2171. listener.Start();
  2172. Socket client = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2173. client.Connect (IPAddress.Loopback, 23456);
  2174. Socket server = listener.AcceptSocket ();
  2175. try {
  2176. server.EndSend(server.BeginSend (new byte[10], 0, 10, SocketFlags.None, null, null));
  2177. client.Close ();
  2178. try {
  2179. server.EndReceive (server.BeginReceive (new byte[10], 0, 10, SocketFlags.None, null, null));
  2180. } catch {
  2181. }
  2182. Assert.IsTrue (!client.Connected);
  2183. Assert.IsTrue (!server.Connected);
  2184. } finally {
  2185. listener.Stop ();
  2186. client.Close ();
  2187. server.Close ();
  2188. }
  2189. }
  2190. #endif
  2191. [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName)
  2192. public void GetSocketOption1_Socket_Closed ()
  2193. {
  2194. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2195. s.Close ();
  2196. try {
  2197. s.GetSocketOption (0, 0);
  2198. Assert.Fail ("#1");
  2199. } catch (ObjectDisposedException ex) {
  2200. // Cannot access a disposed object
  2201. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  2202. Assert.IsNull (ex.InnerException, "#3");
  2203. Assert.IsNotNull (ex.Message, "#4");
  2204. Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
  2205. }
  2206. }
  2207. [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
  2208. public void GetSocketOption2_OptionValue_Null ()
  2209. {
  2210. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2211. try {
  2212. s.GetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
  2213. (byte []) null);
  2214. Assert.Fail ("#1");
  2215. } catch (SocketException ex) {
  2216. // The system detected an invalid pointer address in attempting
  2217. // to use a pointer argument in a call
  2218. Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
  2219. Assert.AreEqual (10014, ex.ErrorCode, "#3");
  2220. Assert.IsNull (ex.InnerException, "#4");
  2221. Assert.IsNotNull (ex.Message, "#5");
  2222. Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
  2223. #if NET_2_0
  2224. Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
  2225. #endif
  2226. }
  2227. }
  2228. [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
  2229. public void GetSocketOption2_Socket_Closed ()
  2230. {
  2231. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2232. s.Close ();
  2233. try {
  2234. s.GetSocketOption (0, 0, (byte []) null);
  2235. Assert.Fail ("#1");
  2236. } catch (ObjectDisposedException ex) {
  2237. // Cannot access a disposed object
  2238. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  2239. Assert.IsNull (ex.InnerException, "#3");
  2240. Assert.IsNotNull (ex.Message, "#4");
  2241. Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
  2242. }
  2243. }
  2244. [Test] // GetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
  2245. public void GetSocketOption3_Socket_Closed ()
  2246. {
  2247. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2248. s.Close ();
  2249. try {
  2250. s.GetSocketOption (0, 0, 0);
  2251. Assert.Fail ("#1");
  2252. } catch (ObjectDisposedException ex) {
  2253. // Cannot access a disposed object
  2254. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  2255. Assert.IsNull (ex.InnerException, "#3");
  2256. Assert.IsNotNull (ex.Message, "#4");
  2257. Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
  2258. }
  2259. }
  2260. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
  2261. public void SetSocketOption1_DontLinger ()
  2262. {
  2263. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2264. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
  2265. new byte [] { 0x00 });
  2266. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
  2267. new byte [] { 0x01 });
  2268. }
  2269. }
  2270. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
  2271. public void SetSocketOption1_DontLinger_Null ()
  2272. {
  2273. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2274. try {
  2275. s.SetSocketOption (SocketOptionLevel.Socket,
  2276. SocketOptionName.DontLinger, (byte []) null);
  2277. Assert.Fail ("#1");
  2278. } catch (SocketException ex) {
  2279. // The system detected an invalid pointer address in attempting
  2280. // to use a pointer argument in a call
  2281. Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
  2282. Assert.AreEqual (10014, ex.ErrorCode, "#3");
  2283. Assert.IsNull (ex.InnerException, "#4");
  2284. Assert.IsNotNull (ex.Message, "#5");
  2285. Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
  2286. #if NET_2_0
  2287. Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
  2288. #endif
  2289. }
  2290. }
  2291. }
  2292. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
  2293. public void SetSocketOption1_Linger_Null ()
  2294. {
  2295. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2296. try {
  2297. s.SetSocketOption (SocketOptionLevel.Socket,
  2298. SocketOptionName.DontLinger, (byte []) null);
  2299. Assert.Fail ("#1");
  2300. } catch (SocketException ex) {
  2301. // The system detected an invalid pointer address in attempting
  2302. // to use a pointer argument in a call
  2303. Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
  2304. Assert.AreEqual (10014, ex.ErrorCode, "#3");
  2305. Assert.IsNull (ex.InnerException, "#4");
  2306. Assert.IsNotNull (ex.Message, "#5");
  2307. Assert.AreEqual (10014, ex.NativeErrorCode, "#6");
  2308. #if NET_2_0
  2309. Assert.AreEqual (SocketError.Fault, ex.SocketErrorCode, "#7");
  2310. #endif
  2311. }
  2312. }
  2313. }
  2314. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Byte [])
  2315. public void SetSocketOption1_Socket_Close ()
  2316. {
  2317. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2318. s.Close ();
  2319. try {
  2320. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger,
  2321. new byte [] { 0x00 });
  2322. Assert.Fail ("#1");
  2323. } catch (ObjectDisposedException ex) {
  2324. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  2325. Assert.IsNull (ex.InnerException, "#3");
  2326. Assert.IsNotNull (ex.Message, "#4");
  2327. Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
  2328. }
  2329. }
  2330. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
  2331. public void SetSocketOption2_DontLinger ()
  2332. {
  2333. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2334. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
  2335. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 5);
  2336. }
  2337. }
  2338. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
  2339. [Category ("NotWorking")]
  2340. public void SetSocketOption2_Linger ()
  2341. {
  2342. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2343. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 0);
  2344. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger, 5);
  2345. }
  2346. }
  2347. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Int32)
  2348. public void SetSocketOption2_Socket_Closed ()
  2349. {
  2350. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2351. s.Close ();
  2352. try {
  2353. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.DontLinger, 0);
  2354. Assert.Fail ("#1");
  2355. } catch (ObjectDisposedException ex) {
  2356. // Cannot access a disposed object
  2357. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  2358. Assert.IsNull (ex.InnerException, "#3");
  2359. Assert.IsNotNull (ex.Message, "#4");
  2360. Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
  2361. }
  2362. }
  2363. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2364. public void SetSocketOption3_AddMembershipIPv4_IPv6MulticastOption ()
  2365. {
  2366. IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
  2367. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
  2368. s.Bind (new IPEndPoint (IPAddress.Any, 1901));
  2369. try {
  2370. s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
  2371. new IPv6MulticastOption (mcast_addr));
  2372. Assert.Fail ("#1");
  2373. } catch (ArgumentException ex) {
  2374. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  2375. Assert.IsNull (ex.InnerException, "#3");
  2376. Assert.IsNotNull (ex.Message, "#4");
  2377. #if NET_2_0
  2378. // The specified value is not a valid 'MulticastOption'
  2379. Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
  2380. Assert.AreEqual ("optionValue", ex.ParamName, "#6");
  2381. #else
  2382. Assert.AreEqual ("optionValue", ex.Message, "#5");
  2383. Assert.IsNull (ex.ParamName, "#6");
  2384. #endif
  2385. }
  2386. }
  2387. }
  2388. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2389. public void SetSocketOption3_AddMembershipIPv4_MulticastOption ()
  2390. {
  2391. IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
  2392. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
  2393. s.Bind (new IPEndPoint (IPAddress.Any, 1901));
  2394. s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
  2395. new MulticastOption (mcast_addr));
  2396. }
  2397. }
  2398. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2399. [Category ("NotWorking")]
  2400. public void SetSocketOption3_AddMembershipIPv4_Socket_NotBound ()
  2401. {
  2402. IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
  2403. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  2404. try {
  2405. s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
  2406. new MulticastOption (mcast_addr));
  2407. Assert.Fail ("#1");
  2408. } catch (SocketException ex) {
  2409. // An invalid argument was supplied
  2410. Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
  2411. Assert.AreEqual (10022, ex.ErrorCode, "#3");
  2412. Assert.IsNull (ex.InnerException, "#4");
  2413. Assert.IsNotNull (ex.Message, "#5");
  2414. Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
  2415. #if NET_2_0
  2416. Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
  2417. #endif
  2418. } finally {
  2419. s.Close ();
  2420. }
  2421. }
  2422. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2423. public void SetSocketOption3_AddMembershipIPv6_IPv6MulticastOption ()
  2424. {
  2425. #if NET_2_0
  2426. if (!Socket.OSSupportsIPv6)
  2427. #else
  2428. if (!Socket.SupportsIPv6)
  2429. #endif
  2430. Assert.Ignore ("IPv6 not enabled.");
  2431. IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
  2432. using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
  2433. s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
  2434. s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
  2435. new IPv6MulticastOption (mcast_addr));
  2436. }
  2437. }
  2438. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2439. public void SetSocketOption3_AddMembershipIPv6_MulticastOption ()
  2440. {
  2441. #if NET_2_0
  2442. if (!Socket.OSSupportsIPv6)
  2443. #else
  2444. if (!Socket.SupportsIPv6)
  2445. #endif
  2446. Assert.Ignore ("IPv6 not enabled.");
  2447. IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
  2448. using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
  2449. s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
  2450. try {
  2451. s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
  2452. new MulticastOption (mcast_addr));
  2453. Assert.Fail ("#1");
  2454. } catch (ArgumentException ex) {
  2455. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  2456. Assert.IsNull (ex.InnerException, "#3");
  2457. Assert.IsNotNull (ex.Message, "#4");
  2458. #if NET_2_0
  2459. // The specified value is not a valid 'IPv6MulticastOption'
  2460. Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
  2461. Assert.AreEqual ("optionValue", ex.ParamName, "#6");
  2462. #else
  2463. Assert.AreEqual ("optionValue", ex.Message, "#5");
  2464. Assert.IsNull (ex.ParamName, "#6");
  2465. #endif
  2466. }
  2467. }
  2468. }
  2469. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2470. [Category ("NotWorking")]
  2471. public void SetSocketOption3_AddMembershipIPv6_Socket_NotBound ()
  2472. {
  2473. IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
  2474. Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
  2475. try {
  2476. s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
  2477. new IPv6MulticastOption (mcast_addr));
  2478. Assert.Fail ("#1");
  2479. } catch (SocketException ex) {
  2480. // An invalid argument was supplied
  2481. Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
  2482. Assert.AreEqual (10022, ex.ErrorCode, "#3");
  2483. Assert.IsNull (ex.InnerException, "#4");
  2484. Assert.IsNotNull (ex.Message, "#5");
  2485. Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
  2486. #if NET_2_0
  2487. Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
  2488. #endif
  2489. } finally {
  2490. s.Close ();
  2491. }
  2492. }
  2493. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2494. public void SetSocketOption3_DontLinger_Boolean ()
  2495. {
  2496. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2497. try {
  2498. s.SetSocketOption (SocketOptionLevel.Socket,
  2499. SocketOptionName.DontLinger, (object) false);
  2500. Assert.Fail ("#1");
  2501. } catch (ArgumentException ex) {
  2502. // The specified value is not valid
  2503. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  2504. Assert.IsNull (ex.InnerException, "#3");
  2505. #if NET_2_0
  2506. Assert.IsNotNull (ex.Message, "#4");
  2507. Assert.AreEqual ("optionValue", ex.ParamName, "#5");
  2508. #else
  2509. Assert.AreEqual ("optionValue", ex.Message, "#4");
  2510. Assert.IsNull (ex.ParamName, "#5");
  2511. #endif
  2512. }
  2513. }
  2514. }
  2515. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2516. public void SetSocketOption3_DontLinger_Int32 ()
  2517. {
  2518. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2519. try {
  2520. s.SetSocketOption (SocketOptionLevel.Socket,
  2521. SocketOptionName.DontLinger, (object) 0);
  2522. Assert.Fail ("#1");
  2523. } catch (ArgumentException ex) {
  2524. // The specified value is not valid
  2525. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  2526. Assert.IsNull (ex.InnerException, "#3");
  2527. #if NET_2_0
  2528. Assert.IsNotNull (ex.Message, "#4");
  2529. Assert.AreEqual ("optionValue", ex.ParamName, "#5");
  2530. #else
  2531. Assert.AreEqual ("optionValue", ex.Message, "#4");
  2532. Assert.IsNull (ex.ParamName, "#5");
  2533. #endif
  2534. }
  2535. }
  2536. }
  2537. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2538. public void SetSocketOption3_DontLinger_LingerOption ()
  2539. {
  2540. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2541. try {
  2542. s.SetSocketOption (SocketOptionLevel.Socket,
  2543. SocketOptionName.DontLinger, new LingerOption (true, 1000));
  2544. Assert.Fail ("#1");
  2545. } catch (ArgumentException ex) {
  2546. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  2547. Assert.IsNull (ex.InnerException, "#3");
  2548. #if NET_2_0
  2549. // The specified value is not valid
  2550. Assert.IsNotNull (ex.Message, "#4");
  2551. Assert.AreEqual ("optionValue", ex.ParamName, "#5");
  2552. #else
  2553. Assert.AreEqual ("optionValue", ex.Message, "#4");
  2554. Assert.IsNull (ex.ParamName, "#5");
  2555. #endif
  2556. }
  2557. }
  2558. }
  2559. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2560. public void SetSocketOption3_Linger_Boolean ()
  2561. {
  2562. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2563. try {
  2564. s.SetSocketOption (SocketOptionLevel.Socket,
  2565. SocketOptionName.Linger, (object) false);
  2566. Assert.Fail ("#1");
  2567. } catch (ArgumentException ex) {
  2568. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  2569. Assert.IsNull (ex.InnerException, "#3");
  2570. #if NET_2_0
  2571. // The specified value is not valid
  2572. Assert.IsNotNull (ex.Message, "#4");
  2573. Assert.AreEqual ("optionValue", ex.ParamName, "#5");
  2574. #else
  2575. Assert.AreEqual ("optionValue", ex.Message, "#4");
  2576. Assert.IsNull (ex.ParamName, "#5");
  2577. #endif
  2578. }
  2579. }
  2580. }
  2581. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2582. public void SetSocketOption3_Linger_Int32 ()
  2583. {
  2584. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2585. try {
  2586. s.SetSocketOption (SocketOptionLevel.Socket,
  2587. SocketOptionName.Linger, (object) 0);
  2588. Assert.Fail ("#1");
  2589. } catch (ArgumentException ex) {
  2590. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  2591. Assert.IsNull (ex.InnerException, "#3");
  2592. #if NET_2_0
  2593. // The specified value is not valid
  2594. Assert.IsNotNull (ex.Message, "#4");
  2595. Assert.AreEqual ("optionValue", ex.ParamName, "#5");
  2596. #else
  2597. Assert.AreEqual ("optionValue", ex.Message, "#4");
  2598. Assert.IsNull (ex.ParamName, "#5");
  2599. #endif
  2600. }
  2601. }
  2602. }
  2603. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2604. public void SetSocketOption3_Linger_LingerOption ()
  2605. {
  2606. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2607. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
  2608. new LingerOption (false, 0));
  2609. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
  2610. new LingerOption (true, 0));
  2611. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
  2612. new LingerOption (false, 1000));
  2613. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
  2614. new LingerOption (true, 1000));
  2615. }
  2616. }
  2617. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2618. public void SetSocketOption3_DropMembershipIPv4_IPv6MulticastOption ()
  2619. {
  2620. IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
  2621. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
  2622. s.Bind (new IPEndPoint (IPAddress.Any, 1901));
  2623. s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
  2624. new MulticastOption (mcast_addr));
  2625. try {
  2626. s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
  2627. new IPv6MulticastOption (mcast_addr));
  2628. Assert.Fail ("#1");
  2629. } catch (ArgumentException ex) {
  2630. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  2631. Assert.IsNull (ex.InnerException, "#3");
  2632. Assert.IsNotNull (ex.Message, "#4");
  2633. #if NET_2_0
  2634. // The specified value is not a valid 'MulticastOption'
  2635. Assert.IsTrue (ex.Message.IndexOf ("'MulticastOption'") != -1, "#5:" + ex.Message);
  2636. Assert.AreEqual ("optionValue", ex.ParamName, "#6");
  2637. #else
  2638. Assert.AreEqual ("optionValue", ex.Message, "#5");
  2639. Assert.IsNull (ex.ParamName, "#6");
  2640. #endif
  2641. }
  2642. }
  2643. }
  2644. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2645. public void SetSocketOption3_DropMembershipIPv4_MulticastOption ()
  2646. {
  2647. IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
  2648. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) {
  2649. MulticastOption option = new MulticastOption (mcast_addr);
  2650. s.Bind (new IPEndPoint (IPAddress.Any, 1901));
  2651. s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.AddMembership,
  2652. option);
  2653. s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
  2654. option);
  2655. }
  2656. }
  2657. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2658. [Category ("NotWorking")]
  2659. public void SetSocketOption3_DropMembershipIPv4_Socket_NotBound ()
  2660. {
  2661. IPAddress mcast_addr = IPAddress.Parse ("239.255.255.250");
  2662. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
  2663. try {
  2664. s.SetSocketOption (SocketOptionLevel.IP, SocketOptionName.DropMembership,
  2665. new MulticastOption (mcast_addr));
  2666. Assert.Fail ("#1");
  2667. } catch (SocketException ex) {
  2668. // An invalid argument was supplied
  2669. Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
  2670. Assert.AreEqual (10022, ex.ErrorCode, "#3");
  2671. Assert.IsNull (ex.InnerException, "#4");
  2672. Assert.IsNotNull (ex.Message, "#5");
  2673. Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
  2674. #if NET_2_0
  2675. Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
  2676. #endif
  2677. } finally {
  2678. s.Close ();
  2679. }
  2680. }
  2681. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2682. public void SetSocketOption3_DropMembershipIPv6_IPv6MulticastOption ()
  2683. {
  2684. #if NET_2_0
  2685. if (!Socket.OSSupportsIPv6)
  2686. #else
  2687. if (!Socket.SupportsIPv6)
  2688. #endif
  2689. Assert.Ignore ("IPv6 not enabled.");
  2690. using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
  2691. IPv6MulticastOption option = new IPv6MulticastOption (
  2692. IPAddress.Parse ("ff02::1"));
  2693. s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
  2694. s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
  2695. option);
  2696. s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
  2697. option);
  2698. }
  2699. }
  2700. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2701. public void SetSocketOption3_DropMembershipIPv6_MulticastOption ()
  2702. {
  2703. #if NET_2_0
  2704. if (!Socket.OSSupportsIPv6)
  2705. #else
  2706. if (!Socket.SupportsIPv6)
  2707. #endif
  2708. Assert.Ignore ("IPv6 not enabled.");
  2709. IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
  2710. using (Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp)) {
  2711. s.Bind (new IPEndPoint (IPAddress.IPv6Any, 1902));
  2712. s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.AddMembership,
  2713. new IPv6MulticastOption (mcast_addr));
  2714. try {
  2715. s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
  2716. new MulticastOption (mcast_addr));
  2717. Assert.Fail ("#1");
  2718. } catch (ArgumentException ex) {
  2719. Assert.AreEqual (typeof (ArgumentException), ex.GetType (), "#2");
  2720. Assert.IsNull (ex.InnerException, "#3");
  2721. Assert.IsNotNull (ex.Message, "#4");
  2722. #if NET_2_0
  2723. // The specified value is not a valid 'IPv6MulticastOption'
  2724. Assert.IsTrue (ex.Message.IndexOf ("'IPv6MulticastOption'") != -1, "#5:" + ex.Message);
  2725. Assert.AreEqual ("optionValue", ex.ParamName, "#6");
  2726. #else
  2727. Assert.AreEqual ("optionValue", ex.Message, "#5");
  2728. Assert.IsNull (ex.ParamName, "#6");
  2729. #endif
  2730. }
  2731. }
  2732. }
  2733. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2734. [Category ("NotWorking")]
  2735. public void SetSocketOption3_DropMembershipIPv6_Socket_NotBound ()
  2736. {
  2737. IPAddress mcast_addr = IPAddress.Parse ("ff02::1");
  2738. Socket s = new Socket (AddressFamily.InterNetworkV6, SocketType.Dgram, ProtocolType.Udp);
  2739. try {
  2740. s.SetSocketOption (SocketOptionLevel.IPv6, SocketOptionName.DropMembership,
  2741. new IPv6MulticastOption (mcast_addr));
  2742. Assert.Fail ("#1");
  2743. } catch (SocketException ex) {
  2744. // An invalid argument was supplied
  2745. Assert.AreEqual (typeof (SocketException), ex.GetType (), "#2");
  2746. Assert.AreEqual (10022, ex.ErrorCode, "#3");
  2747. Assert.IsNull (ex.InnerException, "#4");
  2748. Assert.IsNotNull (ex.Message, "#5");
  2749. Assert.AreEqual (10022, ex.NativeErrorCode, "#6");
  2750. #if NET_2_0
  2751. Assert.AreEqual (SocketError.InvalidArgument, ex.SocketErrorCode, "#7");
  2752. #endif
  2753. } finally {
  2754. s.Close ();
  2755. }
  2756. }
  2757. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2758. public void SetSocketOption3_OptionValue_Null ()
  2759. {
  2760. using (Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) {
  2761. try {
  2762. s.SetSocketOption (SocketOptionLevel.Socket,
  2763. SocketOptionName.Linger, (object) null);
  2764. Assert.Fail ("#1");
  2765. } catch (ArgumentNullException ex) {
  2766. Assert.AreEqual (typeof (ArgumentNullException), ex.GetType (), "#2");
  2767. Assert.IsNull (ex.InnerException, "#3");
  2768. Assert.IsNotNull (ex.Message, "#4");
  2769. Assert.AreEqual ("optionValue", ex.ParamName, "#5");
  2770. }
  2771. }
  2772. }
  2773. [Test] // SetSocketOption (SocketOptionLevel, SocketOptionName, Object)
  2774. public void SetSocketOption3_Socket_Closed ()
  2775. {
  2776. Socket s = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
  2777. s.Close ();
  2778. try {
  2779. s.SetSocketOption (SocketOptionLevel.Socket, SocketOptionName.Linger,
  2780. new LingerOption (false, 0));
  2781. Assert.Fail ("#1");
  2782. } catch (ObjectDisposedException ex) {
  2783. // Cannot access a disposed object
  2784. Assert.AreEqual (typeof (ObjectDisposedException), ex.GetType (), "#2");
  2785. Assert.IsNull (ex.InnerException, "#3");
  2786. Assert.IsNotNull (ex.Message, "#4");
  2787. Assert.AreEqual (typeof (Socket).FullName, ex.ObjectName, "#5");
  2788. }
  2789. }
  2790. }
  2791. }