---
title: "Läsa av en port?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/c-cpp/71313-läsa-av-en-port"
topic: "C/C++"
topic_url: "https://www.webforum.nu/amne/c-cpp"
author: "roj"
published: "2003-03-17T13:47:04.000Z"
updated: "2003-03-19T10:35:40.000Z"
replies: 8
views: 677
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/c-cpp/71313-läsa-av-en-port"
---

# Läsa av en port?

## #1 — roj, 2003-03-17T13:47Z

Jag vill kunna kolla av tcp/ip stacken på en port och se om det finns något eller om det är tomt. 
Mitt program stannar bara och lyssnar och låser sig i det läget tills något kommer på porten. 
Jag vill bara snabbt kunna kolla om det finns något på stacken och sen beroende på om det fanns något eller inte gå vidare. hmm (Utan att bygga en loop).

Jag använder mig av wsock32.lib och det är när den utför
**accept()** som den stannar och väntar tills det kommer något på porten och det är det jag vill undvika.

Permalänk: https://www.webforum.nu/p/71313

## #2 — niko, 2003-03-17T17:03Z

Då får du antingen läsa från socketen i en egen tråd eller använda en asynkron (icke-blockerande) socket.

Permalänk: https://www.webforum.nu/p/982553

## #3 — roj, 2003-03-18T10:25Z

Vet du någonstans jag kan läsa mer om att använda en asynkron socket eller att skapa en egen tråd?

Permalänk: https://www.webforum.nu/p/983008

## #4 — niko, 2003-03-18T10:44Z

Asynkrona sockets bygger på att man anropar *Wsaasyncselect* (sök på Google) och säger till Windows att skicka meddelanden till ett visst fönster då det finns data på socketen. Fast det är ganska krångligt att få ihop om man inte har färdig kod eller gjort det förut. Trådningsvarianten är nog lättare.
Ungefär:

```
DWORD APIENTRY mySocketThread(void *param)
{
	//Lägg koden som hanterar socketen här.
	//Eftersom detta är en egen tråd kommer WinMain inte att blockeras.
}

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
	DWORD dwTid; 
	//Starta tråden som hanterar socketen.
	CreateThread(NULL, 0,  
                (LPTHREAD_START_ROUTINE)mySocketThread, NULL,  
                0, &dwTid); 
	//Fortsätt att göra andra saker man normalt gör. 
	//Skapa fönster osv ..
	return 0;
}
```

Permalänk: https://www.webforum.nu/p/983022

## #5 — Engine^, 2003-03-18T11:01Z

Ett tips till är att du går till [Code Project](http://www.codeproject.com) och söker på threads och sockets.

[WSAAsyncSelect](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsaasyncselect_2.asp) är som **niko** sa struligt, men trevligt ;)

Permalänk: https://www.webforum.nu/p/983026

## #6 — PeW, 2003-03-18T12:10Z

niko:
Behöver man inte i det här fallet anropa schemaläggaren och/eller använda semaforer för att låta mySocketThread dela med sig till körtid till main-tråden?

Permalänk: https://www.webforum.nu/p/983055

## #7 — niko, 2003-03-18T12:20Z

Nej, det båda trådarna kommer i det här fallet (förstaparametern i CreateThread=NULL) att få samma prioritet och slåss om processorn helt demokratiskt. Semaforer (eller annan mekanism) behövs eventuellt om man tänker dela socketen (eller annan kritisk resurs) mellan trådarna. Jag förutsatte det enklast tänkbara scenariot där *all* hantering av socketen sköts i den nya tråden. Om det sen fungerar vet jag inte eftersom jag inte vet exakt vad roj vill göra eller vad som ska ske då det finns data på socketen.

Permalänk: https://www.webforum.nu/p/983063

## #8 — roj, 2003-03-19T08:58Z

Vad jag ska göra är ett pluggin som körs när det blir idle tid över i huvud programmet. Under denna idle tid vill jag gå in och kolla ifall något har skickats till mej om inte fortsätta och kolla igen så länge jag är idle. Detta funkar ju inte eftersom när jag börjar lyssna på porten så stannar den i det läget och lyssnar tills jag fått in något på porten vilket hänger mitt program. Jag vill alltså bara gå in läsa av porten och sen fortsätta oavsett om det har skickats något eller ej.

Permalänk: https://www.webforum.nu/p/983637

## #9 — roj, 2003-03-19T10:35Z

Lyckades ville bara säga det :). Använde mej av nikos exempel.. Tack alla för hjälpen.

Permalänk: https://www.webforum.nu/p/983671

---

Tråden på webben: https://www.webforum.nu/amne/c-cpp/71313-läsa-av-en-port
