Torna indietro   Hardware Upgrade Forum > Software > Programmazione

6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026
Al MWC Qualcomm annuncia una coalizione industriale per lanciare il 6G entro il 2029 e introduce agenti IA per la gestione autonoma della RAN. Ericsson, presente sul palco, conferma la direzione: le reti del futuro saranno IA-native fin dalla progettazione
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso
CHUWI CoreBook Air è un ultraleggero da 1 kg con Ryzen 5 6600H, display 14" 16:10 e 16 GB LPDDR5. Offre buona portabilità, autonomia discreta e costruzione in alluminio, ma storage PCIe 3.0 e RAM saldata limitano l'espandibilità. A 549 euro sfida brand più noti nella stessa fascia di mercato.
Roborock Saros 20: il robot preciso e molto sottile
Roborock Saros 20: il robot preciso e molto sottile
Il nuovo robot di Roborock per l'aspirazione della polvere e il lavaggio dei pavimenti spicca per immediatezza d'uso e per l'efficacia dell'azione, grazie anche a un ridotto sviluppo in altezza. Saros 20 integra un motore da ben 36.000Pa di potenza e un sistema di lavaggio a due panni rotanti, con bracci estensibili e un sistema di navigazione molto preciso.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-05-2004, 19:34   #1
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
Socket Win-Lin

Codice:
 
#ifndef SOCK_HPP
#define SOCK_HPP

#ifdef WIN32
			#include <winsock2.h>
			typedef SOCKET sock_t;
			#define CLOSE(x) closesocket(x); WSACleanup();
			#define SEND(sck, msg) send(sck, msg, sizeof(msg), 0);
			#define RECV(sck, msg) recv(sck, msg, sizeof(msg), 0);
#elif def LINUX
			#include <sys/types.h>
			#include <sys/socket.h>
			#include <netinet/in.h>
			#include <netdb.h>
			typedef int sock_t;
			#define CLOSE(x) close(x); 
			#define SEND(sck, msg) write(sck,msg,strlen(msg))
			#define RECV(sck, msg) read(sck,msg,strlen(msg))
#endif


#endif
Questo colma le leggeredifferenze tra win e lin riguardo ai socket??

Tnk
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 20:44   #2
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Re: Socket Win-Lin

Sì e no.
Innanzitutto una nota cosmetica: nelle macro non aggiungere il ";" (altrimenti negli if...else sei fregato).
Per lo stesso motivo, se hai
#define a(x) b(x); c(x);
dovresti scrivere
Codice:
#define a(x) do { \
 b(x); \
 c(x); } while(0)
Riguardo al codice, non usare WSACleanup quando chiudi il socket, in quanto potresti voler aprire più socket (WSAStartup va chiamata solo all'apertura del primo socket, e la cleanup solo alla chiusura dell'ultimo, o dell'applicazione).
Infine, usa anche nella versione linux le funzioni send e recv -- sono praticamente le stesse che su windows.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12

Ultima modifica di ilsensine : 17-05-2004 alle 21:03.
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 23:41   #3
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
ecco il code finale:
Codice:
 
#ifndef SOCK_HPP
#define SOCK_HPP

#include <iostream>
/// Safe Array deleting
#define ARRAY_SAFE_DELETE(ptr) delete[] ptr; ptr = NULL;

///
/// This is a generalization of socket
///
typedef int sock_t;
#ifdef __WIN__
			//#warning "Win32 Mode On"
			#include <winsock2.h>
			#define CLOSE(x) closesocket(x);
			#define SEND(sck, msg) send(sck, msg, sizeof(msg), 0)
			#define RECV(sck, msg) recv(sck, msg, sizeof(msg), 0)
#elif defined(__LINUX__)
		    #warning "Linux Mode On"
			#include <sys/types.h>
			#include <sys/socket.h>
			#include <netinet/in.h>
			#include <netdb.h>
			#define CLOSE(x) close(x);
			#define SEND(sck, msg) write(sck,msg,strlen(msg))
			#define RECV(sck, msg) read(sck,msg,strlen(msg))	
#endif

/// The Error Enum
enum
{
	ERR_SOCK_INVALID = 0x0, /// invalid socket
	ERR_SOCK_CONNECT, /// error in connection
	ERR_SOCK_SEND, /// error in send
	ERR_SOCK_RECV, /// error in recv
};
///
/// Client Socket
///
class CClientSocket
{
 private:
 				 sock_t my_socket;
				 #ifdef __WIN__
 				 				WSAData wsaData;
 				 #endif
				 struct hostent *host_entry;
				 struct sockaddr_in server;
 public: 	
 					CClientSocket();
				 ~CClientSocket();
				 int Build(const std::string addr, unsigned short port);
				 void Close();
				 int Read(char *buf);
				 int Write(char *buf);
};

CClientSocket::CClientSocket()
{
 #ifdef __WIN__
				WSAStartup(MAKEWORD(2, 2), &wsaData); 
 #endif
}

CClientSocket::~CClientSocket()
{
}

int CClientSocket::Read(char *buf)
{
 if(RECV(my_socket, buf) != 0)
 		return ERR_SOCK_RECV;
 return 0;
}

int CClientSocket::Write(char *buf)
{
  if(SEND(my_socket, buf) != 0)
 		return ERR_SOCK_SEND;
  return 0;
}

int CClientSocket::Build(const std::string addr, unsigned short port)
{
 my_socket = socket(AF_INET,SOCK_STREAM,0);
 
 host_entry = gethostbyname(addr.c_str());
 
 server.sin_family = AF_INET;
 server.sin_port = htons(port);
 server.sin_addr.s_addr = *(unsigned long*) host_entry->h_addr;
 
 if(connect(my_socket, (sockaddr*)&server, sizeof(server)) != 0)
	 return ERR_SOCK_CONNECT;
 return 0;
}

void CClientSocket::Close()
{
 CLOSE(my_socket)
}



#endif
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 23:44   #4
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
A parte il fatto che hai ignorato metà dei miei suggerimenti ( ), ti INVITO, come ti ho già detto un'altra volta, a correggere questa CASTRONERIA:
#define RECV(sck, msg) recv(sck, msg, sizeof(msg), 0)
Mi ascolti, eh?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 23:46   #5
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Anche queste sono castronerie

if(RECV(my_socket, buf) != 0) return ERR_SOCK_RECV;

if(SEND(my_socket, buf) != 0) return ERR_SOCK_SEND;
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 17-05-2004, 23:49   #6
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Altre imprecisioni minori:

my_socket = socket(AF_INET,SOCK_STREAM,0);
Non controlli il valore di ritorno nel caso che la socket fallisca.

host_entry = gethostbyname(addr.c_str());
Se l'host non esiste/non è raggiungibile, la funzione ritorna NULL.
Attenzione se fai applicazioni multithread: la gethostbyname non è "reentrant" (almeno su linux; esiste la gethostbyname_r)

if(connect(my_socket, (sockaddr*)&server, sizeof(server)) != 0)
return ERR_SOCK_CONNECT;
Se la connect fallisce, chi libera il socket che hai allocato poche righe sopra?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 18-05-2004, 08:08   #7
Luc@s
Senior Member
 
L'Avatar di Luc@s
 
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
tnk x i suggerimenti.
Ora li mettero in pratica
__________________
Gnu/Linux User
Luc@s è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


6G, da rete che trasporta dati a rete intelligente: Qualcomm accelera al MWC 2026 6G, da rete che trasporta dati a rete intelligen...
CHUWI CoreBook Air alla prova: design premium, buona autonomia e qualche compromesso CHUWI CoreBook Air alla prova: design premium, b...
Roborock Saros 20: il robot preciso e molto sottile Roborock Saros 20: il robot preciso e molto sott...
ASUS ROG Kithara: quando HIFIMAN incontra il gaming con driver planari da 100mm ASUS ROG Kithara: quando HIFIMAN incontra il gam...
Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
MaiaSpace ha posticipato il suo primo la...
Roscosmos ha annunciato il ripristino de...
Monarch: se usi più di due scherm...
Microsoft espande la sua offerta di clou...
Traffico di licenze Windows e Office: ar...
'Sembra stia defecando': il creatore di ...
Akamai: zero trust su tecnologia NVIDIA ...
Apple presenta il MacBook Air con chip M...
Memorie e chip cinesi nel mirino degli U...
Apple presenta il MacBook Pro con M5 Pro...
Apple rinnova la linea monitor: arrivano...
M5 Pro e M5 Max ufficiali: i chip Apple ...
World of Warcraft: Midnight è adesso dis...
NVIDIA: i nuovi driver limitano le tensi...
La tua azienda è conforme all'AI ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:29.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v