[c] vage winsock select error

Pagina: 1
Acties:

  • morphje
  • Registratie: Juni 2001
  • Laatst online: 05-09 07:36

morphje

let's all love lain

Topicstarter
Hmmm hier is het geval
Ik had een selectserver gebouwd voor meedere clients, ging allemaal van het lije dakje. totdat ik wat veranderde en een selecterror kreeg.

Gelukkig had ik nog een backup en had ik mijn oude source weer terug. Ik kopieer die source naar een nieuwe file en haal me payload eruit. Wat blijkt, zelfde selecterror select returned -1 en als error krijg ik 0 (woehoe)

sel_val=select(fdmax+1, &read_fds, NULL, NULL, &tv);
is mijn functie fdmax+1 heb ik ingebouwd om portable te zijn naar *N?X, maar word gegenegeert door winsock (gehaald uit MSDN)

Ik heb even voor het gemak mijn sourcecodes op de volgende locaties gezet 4 is 2 met alle payload eruit gehaald.

http://www.clan-dsk.com/morphje/selectserver2.c
http://www.clan-dsk.com/morphje/selectserver4.c

Ik snap er echt niks meer van en word nu toch best wel :(
Wie helpt mij. Als je ook nog op outerbrains komt, staat er een biertje te wachten :)

  • morphje
  • Registratie: Juni 2001
  • Laatst online: 05-09 07:36

morphje

let's all love lain

Topicstarter
Okee oplossing gevonden

bij de foute versie had ik staan
#include <dos.h>
struct time t;

zodra ik die aanroep gaat het fout ...
die include doet ie makkelijk
maar die struct heeft ie blijkbaar problemen mee
vind ik vaag, want select heeft niks met die var te maken

sel_val=select(fdmax+1, &read_fds, NULL, NULL, &tv);

Misschien heeft het te maken dat ik die
struct timeval tv;
erin heb gezet :? ik weet het niet
en toch heb ik die tijd nodig. Heeft iemand een ander idee hoe ik die tijd kan aanroepen ?

ps. ja ik weet dat het niet netjes staat om een dosapp te maken met messagebox en winsock :)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:13
Ik neem aan dat je een console application aan 't bouwen bent, aangezien WinSock bij mijn weten alleen onder Windows (en dus niet onder DOS) werkt.

Probeer eens om time.h te includen in plaats van dos.h, daarin wordt ook struct time gedefinieerd. Geen idee of dat uitmaakt, maar het zou natuurlijk kunnen. Het is sowieso niet zo netjes om de dos header te includen in wat een 32bits Windows applicatie moet worden.

  • morphje
  • Registratie: Juni 2001
  • Laatst online: 05-09 07:36

morphje

let's all love lain

Topicstarter
aaaaaaah

gevonden
struct tm

beetje zitten klooien
moet weer eens werken met pointers en pointers naar structs willen nooit bij mij lukken :'(
struct tm *t;
tijd=t.tm_hour; <= die gaat dus fout :(
Structure required on left side of . or .*

nog even stoeien met die pointers dan maar :)

Enne ik wilde een tcp/ip client-server maken vanwege bepaalde omstandigheden op school, daarom gebruik ik winsock, omdat we toch op borland c++ draaien. In een dosbox draait de app, dus i don't care :)

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:13
Nou, trakteer jezelf maar op een biertje dan. ;)

Overigens snap ik nog steeds niet wat er nu precies mis was/ging?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 12-09 23:01
Op woensdag 06 maart 2002 19:59 schreef morphje het volgende:
struct tm *t;
tijd=t.tm_hour;
t is een pointer, dan moet je -> gebruiken om de struct velden te benaderen.

Laat je t ook nog ergens naartoe wijzen, anders krijg jij van ome Bill ook een mooie access violation om de oren. :)

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:13
Ik begrijp nog steeds niet hoe dat een runtime error op kan leveren, want als het goed is compileerde die code uberhaupt niet. Maar goed, als het nu werkt en iedereen gelukkig is ben ik dat ook ;)

  • morphje
  • Registratie: Juni 2001
  • Laatst online: 05-09 07:36

morphje

let's all love lain

Topicstarter
ow die pointer heb ik anders opgelost namelijk op deze manier

(*t).tm_hour duurde eventjes voordat ik dat vond, maar idd -> kan ook :)

Enne dit proggie levert geen runtime error op tot zover
het probleem lag voor zover ik weet in het aanroepen van 2 time structs, ik heb dus nu een kleine functie geschreven die de tijd van de dag in seconden terug geeft :)
code:
1
2
3
4
5
6
unsigned long haaltijd()
{
  struct time t;
  gettime(&t);
  return t.ti_hour*3600+t.ti_min*60+t.ti_sec;
}

werkt nu goed alleen krijg ik nu weer een vage error die ook weer nergens op slaat, maar ach ik vind het nog wel denk ik :) ik wil best de nieuwe versies online zetten, misschien dat iemand nog de fout kan vinden die ik nu heb :/ misschien vind ik zelf wel de fout, ik weet het niet

Nou vooruit, hier is de huidige sourcecode
http://www.clan-dsk.com/morphje/selectserver6.c

deze werkt, maar haal die comment eens weg van die
if (kraan==11 && actiedruktijd<=tijd)
dan krijg ik weer een select error. net of ie die actiedruktijd niet leuk vind ofzo

ik heb het gecompiled in borland c++ en draai de app in een dosbox, waardoor hij nog wel toegang heeft tot winsock :)
De functie is hardware te simuleren van een cv ketel, inclusief de nodige sensoren. Ik heb me best gedaan om het geheel netjes te progelen, maar af en toe issut een zooitje :)
Pagina: 1