Ψαχνοντας κωδικα για το πως μπορω να εχω SSL/TLS σε C++ πετυχα το παρακατω (αποσπασμα)
ο κωδικας θα εκτελεστει το πολυ μια φορα καθως σε καθε περιπτωση η γινεται return η break, για ποιον λογο εχει βαλει αυτο το κομματι κωδικα μεσα σε for?Κώδικας://δηλωσεις και αρχικοποιησεις εδω... //... for (;;) { ss = ApplyControlToken(&hCtx, &sbout); if (FAILED(ss)) return -1; DWORD dwSSPIFlags; DWORD dwSSPIOutFlags; dwSSPIFlags = ISC_REQ_SEQUENCE_DETECT | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONFIDENTIALITY | ISC_RET_EXTENDED_ERROR | ISC_REQ_ALLOCATE_MEMORY | ISC_REQ_STREAM; OutBuffers[0].pvBuffer = NULL; OutBuffers[0].BufferType = SECBUFFER_TOKEN; OutBuffers[0].cbBuffer = 0; sbout.cBuffers = 1; sbout.pBuffers = OutBuffers; sbout.ulVersion = SECBUFFER_VERSION; ss = InitializeSecurityContext(&hCred, &hCtx, NULL, dwSSPIFlags, 0, SECURITY_NATIVE_DREP, NULL, 0, &hCtx, &sbout, &dwSSPIOutFlags, 0); if (FAILED(ss)) return -1; PBYTE pbMessage; DWORD cbMessage; pbMessage = (BYTE *)(OutBuffers[0].pvBuffer); cbMessage = OutBuffers[0].cbBuffer; if (pbMessage != NULL && cbMessage != 0) { int rval = ssend_p((char*)pbMessage, cbMessage); FreeContextBuffer(pbMessage); return rval; } break; }
Εμφάνιση 1-6 από 6
-
09-02-17, 23:08 for που εκτελείται μόνο μια φορά #1
Τελευταία επεξεργασία από το μέλος mr.null : 09-02-17 στις 23:15.
-
10-02-17, 02:36 Απάντηση: for που εκτελείται μόνο μια φορά #2
To for δεν έχει νόημα μιας και το break δεν βρίσκεται σε κάποιο συνθήκη. Πιθανόν το έχει εκεί ώστε μελλοντικά να βάλει κάποιου είδους επανάληψη.
ουδέν μονιμότερο του προσωρινού
-
10-02-17, 14:31 Απάντηση: for που εκτελείται μόνο μια φορά #3
Να υποθέσω, ότι for με κενά ορίσματα, όπως το παραπάνω, αν δεν έχει το break, θα εκτελείται επ' άπειρον;
Επιτέλους το ελάχιστο δυνατό, ευέλικτο, και ψηφιακό κράτος. Με διαρκή αξιολόγηση.
-
10-02-17, 14:33 Απάντηση: for που εκτελείται μόνο μια φορά #4
Ναι. Για αυτό και η Break.
ουδέν μονιμότερο του προσωρινού
-
11-02-17, 15:50 Απάντηση: for που εκτελείται μόνο μια φορά #5
Στον συγκεκριμένο κώδικα όντως δεν πρέπει να έχει κάποιο νόημα. Τέτοια for όμως χρησιμοποιούνται συχνά (αν και πιο συχνά το κάνουμε με while).
Ας πούμε ότι θέλεις να διαβάσεις είσοδο σταθερού μεγέθους και να την επεξεργαστείς οπότε έχεις κάτι σαν το παρακάτω:
Κώδικας:myfd = open(κτλ) while (r > 0) { r = read(myfd, buf, bufsize); do something; }
Έτσι μπορείς να αλλάξεις την σύνταξη και να χρησιμοποιήσεις ένα τέτοιο for (αν και όπως είπα πριν στο 99% των περιπτώσεων χρησιμοποιούμε while) και να κάνεις read συνέχεια όπως το παρακάτω:
Κώδικας:br = 0; for (;;) { r = read(myfd, buf + br, bufsize - br); if (r == -1) { if (errno == EAGAIN) { sleep(1); continue; } Αν έχουμε άλλου είδους λάθη, πράξε ανάλογα } br += r; if (br == επιθυμητό μέγεθος) { do something; br = 0; } }
Στην προκειμένη περίπτωση φυσικά δεν ξέρουμε τι σκεφτόταν ο συγγραφέας. Αν το βρήκες σε κάποιο αποθετήριο, μπορείς να δεις το commit log μήπως εξηγεί γιατί το έκανε έτσι."I like offending people, because I think people who get offended should be offended" - Linus Torvalds
"Παλιά είχαμε φτωχούς οι οποίοι ζούσανε σε φτωχογειτονιές. Τώρα, η οικονομικά δυσπραγούσα τάξη
κατέχει στέγες υποδεέστερης ποιότητας σε υποβαθμισμένα αστικά κέντρα" - George Carlin
Γα.... την πολιτική ορθότητα.
-
11-02-17, 18:47 Απάντηση: for που εκτελείται μόνο μια φορά #6
Ναι γνωριζω γι'αυτες τις περιπτωσεις οπως κ οτι χρησιμοποιειται κατι τετοιο για να αποφυγεις την goto
Κώδικας:do{ //... //... if(error) break; //... //... }while(false);
Παρόμοια Θέματα
-
Η Apple συνεχίζει τη διαμάχη της με την Qualcomm, αυτή τη φορά με μια μήνυση για 1 δις γουαν
Από sdikr στο φόρουμ ΕιδήσειςΜηνύματα: 6Τελευταίο Μήνυμα: 28-01-17, 12:14 -
Wind Router (αυτο που χρειαζεται μονο ρευμα)
Από Nik_Gr στο φόρουμ WindΜηνύματα: 24Τελευταίο Μήνυμα: 11-10-16, 11:10
Bookmarks