[x^2 for x in lst]

0.0.0.0

2014-09-23

Ibland händer det mig att jag träffar på någon sak som får mig att tänka: "det här var ju pinsamt att jag inte kunde". Det händer inte så ofta. Inte på grund av att jag kan så mycket, utan mest för att jag är medveten om hur lite jag kan. Det blir därför inte så pinsamt att erkänna för mig själv och för andra att jag inte kan en viss sak. Men ibland händer det, som sagt var, att jag stöter på något som jag tycker att jag borde kunnat. Idag var en sådan dag.

Kollegan och jag diskuterade ett problem med att skicka UDP-trafik från en dator till en annan. Problemet vi hade var att trots att vi visste att meddelandena skickades från avsändardatorn kom de inte fram till UDP-servern vi startat på mottagardatorn. Jag hade dagen innan kollat upp om det inte var något brandväggsproblem, men det verkade det inte vara. Nu hade i alla fall kollegan löst problemet.

När jag frågade honom hur han löst problemet förklarade han att fixat det genom att starta om UDP-servern och speca dess host till 0.0.0.0 istället för localhost.
- "OK. Hur kunde det avhjälpa problemet?", undrade jag.
- "Startar man en server på adress 0.0.0.0 så lyssnar den på alla nätverksinterface på datorn. Inte bara ett specifikt. Det kan vara bra om det finns flera nätverksinterface på datorn, och så var det i det här fallet. Använde man localhost när man startade började servern lyssna på fel interface".

Aah. Det verkade ju verkligen användbart. Varför visste jag inte om det här? Jag hade sett adressen 0.0.0.0 vid olika tillfällen, men aldrig funderat över vad den kunde betyda. Nu fick jag en anledning att läsa på lite.

Surfade in på in på Wikipedia som jag brukar när jag vill läsa på lite kort om någon sak eller något ämne. Artikeln där listade flera olika användningsområden för 0.0.0.0 varav den sista i listan var just: "A way to specify any IPv4-interface at all". Det stog även att addressen när den användes på detta sätt kallades för INADDR_ANY.

Eftersom wikipediasidan var ganska kortfattad så googlade jag vidare på INADDR_ANY och kom då till man-sidan för IP i Linux Programmers Manual (länk här). På den sidan står följande att läsa om INADDR_ANY: "When INADDR_ANY is specified in the bind call, the socket will be bound to all local interfaces." Dvs precis det som kollegan hade sagt! Inte för att jag för ett ögonblick tvivlade på honon, men det är ju alltid bra att läsa på lite själv ;)

Summa summarum: idag har jag lärt mig att man kan binda till IP 0.0.0.0 för att få sin lyssnare att lyssna på alla lokala interface. Lite jobbigt att jag inte kände till det sedan länge, men det är väl bara att bryta ihop och komma igen som Per Elofsson sa ;)


Leave a reply

Your name as it will be displayed when the comment is posted on the page. Your email address will not be published.