473,413 Members | 1,778 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 473,413 software developers and data experts.

working with big packets and sockets.

I have This Code.
Token.c:

typedef struct {
unsigned char orden;
char ciudad[20];
unsigned char ip[16]; //que son del router Asociado a la ciudad
unsigned int puerto; // """
//int socket;
}Ciudad;

typedef struct {
unsigned char ip[4];
unsigned int puerto;
int socket;
}Router;

typedef struct{
char ciudad[20];
char equipo[20];
int puntos;
int pGanados, pPerdidos, pEmpatados;
} TDP;

typedef struct {
int Ident;
Ciudad** listaCiudad;
TDP** listaTDP;
}Token;
//-------GLOBALES-------------------

int puertociudad;
char *ipciudad;
int puertoescucha;
int pRouterA;
char *iplocal;
int Orden;
int MASTER;
int LISTO; //indica si ya tiene una ciudad asociada
char *ipRouterA;
Ciudad ciudadAsociada;
Router **listaRouters;
//-------FUNCIONES------------------
void esperar(int t,int s);
void PI(char *buf,int socket,int nbytes);
char* LeerConfig(FILE* arch,char* ipciudad,char * iplocal,int
*puertoescucha,
int * puertociudad,char IProuterA[16], int *ProuterA );
static int escuchar_socket (int listen_port);
int crearsocketyconectarse(int p,char* ip);
time_t* ponertiempoactual(time_t *t);
unsigned char* Ip2Short(char* s);

/*listas de Ciudad...*/

Ciudad* buscarCiudad(Ciudad** lista,
char ciudad[20], char ip[16],
int puerto, unsigned char orden, int criterio);

Ciudad** quitarCiudad (Ciudad** lista, char ciudad[20]);

Ciudad** agregarCiudad (Ciudad** lista,char ciudad[20], char ip[16],
int puerto,
unsigned char orden);

void imprimirCiudad(Ciudad** lista);

/*listas de Router...*/
Router* buscarRouter(
Router** lista, unsigned char ip[4],int puerto, int socket, int
criterio);
void imprimirRouters(Router** lista);
Router** quitarRouter (Router** lista, int socket);
Router** agregarRouter (Router** lista, unsigned char ip[4],int puerto,
int socket);

/*listas de TDP*/
TDP* buscarTDP(TDP** lista,
char ciudad[20], char equipo[20],
int puntos, int pGanados, int pEmpatados, int pPerdidos,int criterio);

void imprimirTDP(TDP** lista);

TDP** quitarTDP (TDP** lista, char ciudad[20]);

TDP** agregarTDP (TDP** lista,char ciudad[20], char equipo[20], int
puntos, int pGanados,
int pPerdidos, int pEmpatados);

int sendall(int s, char *buf, int *len);
int sendall(int s, char *buf, int *len);
Token unToken,rcvToken;
Ciudad **ListaCiudades, **rcvCiudades;
TDP **ListaTDP, **rcvTDPs;
Ciudad *auxCiudad;
TDP *auxTDP;
int separador;
//----------------------------------
int main(int argc,char *argv[])
{
/*Lleno un Token Ejemplo ...
typedef struct { typedef struct{
int Ident; char ciudad[20];
Ciudad** listaCiudad; char equipo[20];
TDP** listaTDP; int puntos;
}Token; int pGanados, pPerdidos, pEmpatados;
} TDP;*/

ListaCiudades=malloc(sizeof(Ciudad*));
ListaTDP=malloc(sizeof(TDP*));
unToken.listaCiudad=ListaCiudades;
unToken.listaTDP=ListaTDP;
/*Lleno:
1) La identificacion, cualquiera...
*/ unToken.Ident=1;
/*Agrego 2 ciudades*/
unToken.listaCiudad= agregarCiudad (unToken.listaCiudad,"BuenosAires",
"192.168.0.1",
9 , 1);
unToken.listaCiudad= agregarCiudad (unToken.listaCiudad,"Tegucigalpa",
"192.168.0.2",
10 , 2);
unToken.listaCiudad= agregarCiudad
(unToken.listaCiudad,"RiodeJaneiro", "192.168.0.3", 11 , 3);
unToken.listaCiudad= agregarCiudad (unToken.listaCiudad,"Timbuctu",
"192.168.0.4", 12 , 4);
/*Agrego 3 equipos*/
unToken.listaTDP = agregarTDP (unToken.listaTDP,"BuenosAires", "eqA",
3, 1, 0,0);
unToken.listaTDP = agregarTDP (unToken.listaTDP,"Tegucigalpa", "eqB",
0, 0, 1,0);
unToken.listaTDP = agregarTDP (unToken.listaTDP,"BuenosAires",
"eqC", 5, 1, 0,2);
/*Imprimo Resultados*/
system("clear");
printf("\\");
printf("///////////////Token, Ident de Juego:%d////////////\n",
unToken.Ident);
printf("///////Lista TDP///////////\n");
imprimirTDP( unToken.listaTDP);
printf("///////Lista Ciudad///////\n");
imprimirCiudad(unToken.listaCiudad);
printf("//////////////////Fin del Token//////////////////\n");

/*Preparo un Paquetote (con el token bolo)*/
/*Tomo El Tamaño*/
{ // esta llave esta para poder declarar variables sin que se queje
el compilador
int i,j,tokenSize, offset;
int s[2] = {0};
int pfds[2], nbytes;
char *rcvBuf;
char *buf;
char *paquete, rcvdata[256];
int total;
TDP regAux; //Solo para testear No es Necesario

tokenSize=sizeof(int); //El token pesa lo que un Int, MAS....

for (i=0;unToken.listaCiudad[i]!=NULL; i++) // i Veces *
tokenSize += sizeof(Ciudad) ; //Registro de Ciudad
printf("UN Registro Ciudad pesa,:%d \n",sizeof(Ciudad));
tokenSize++;
for (i=0;unToken.listaTDP[i]!=NULL; i++) // i Veces *
tokenSize += sizeof(TDP) ; //Registro de TDP
printf("Registro TDP:%d \n",sizeof(TDP));

printf("La data token pesa %d bytes Bolo!, Sin El Terminador\n",
tokenSize);
printf("creo un SocketPair, similar a un Socket para probar la
transferencia\n");

if (socketpair(AF_UNIX, SOCK_STREAM,0,s) == -1 ) exit(1);
//send(s[1],"HOLA",strlen("HOLA"),0);
//recv(s[0],buf,5,0); printf("buf : %s\n", buf);
//exit(1);
/*Malloc y Relleno...*/
paquete=malloc(tokenSize+1); //+1, por el Terminador
/*Formato del Token :
IDENT/RegistrosdeCiudad-IdemDeTDP \ Termina con "\" */
memcpy(paquete, &unToken.Ident, sizeof(int));
//paquete[sizeof(int)]='/'; //Separo
offset=sizeof(int); //lo corro 1 Int. (4 bytes!)
//printf("Offset:%d\n",offset);
for (i=0;unToken.listaCiudad[i]!=NULL; i++)
{//Copio un registro, aumento el offset a Registro +1 y Termino en
Offset +1 con '/'
memcpy(paquete + offset, unToken.listaCiudad[i], sizeof(Ciudad));
offset+= sizeof(Ciudad) ; //paquete[offset-1] ='/' ;

}

paquete[offset]='-'; //Pongo este separador para separar la lista de
Ciudades de la TDP
offset++;
for (i=0;unToken.listaTDP[i]!=NULL; i++)
{//Copio un registro, aumento el offset a Registro +1 y Termino en
Offset +1 con '/'
memcpy(paquete + offset, unToken.listaTDP[i], sizeof(TDP));
offset+= sizeof(TDP) ; //paquete[offset-1] ='/' ;
}

printf("El paquete esta llenito, offset salio con:%dBytes,porq ahi
pongo el Terminador Bolo...\n",
offset);
paquete[offset]='\\';

total = tokenSize+1;
printf("SendAll salio con %d\n",sendall(s[1], paquete,&total ));

/*s= crearsocketyconectarse(5000,"127.0.0.1");
write(s,paquete,tokenSize+1);
close(s);
write(pfds[1], paquete, tokenSize+1);*/
free(paquete);

/*HASTA AQUI EL ROUTER que ENVIA*/

/*Ahora Le toca a la Ciudad o Router q Reciben.. */
//nbytes=read(pfds[0], buf, tokenSize+1);

//nbytes=recv(s[1], buf, 256,0);
//Empiezo a recibir
total=0;i=0;
buf=malloc(256);
do {
nbytes=recv(s[0], rcvdata, 256,0);
total+=nbytes;
if (nbytes>0) {
//Me confio q hay memoria... por ahora...
buf=realloc(buf, total); memcpy(buf+(total*i), rcvdata, 256);
i++;
}
printf("nbytes:%d, total:%d\n",nbytes,total);
if (nbytes==0) break;
}while (nbytes==256 );
free(rcvdata);
//Procesado del Token/////////////////////////////////////////////
printf("Tamaño del Paquete Recibido:%d\n",total);
offset=0;
//COPIO el IDENT
memcpy(&rcvToken.Ident, buf, sizeof(int)); offset+=sizeof(int);
printf("///////////////////////////\n");
for (i=offset; buf[i]!='-'; i++); //Busco el divisor de listas
printf("i:%d\n", i);
separador=i;
i=(i-4) / sizeof (Ciudad);// printf("Cantidad de Registros Ciudad en
el Buffer: %d\n", i);
//Dimensiono
rcvCiudades=malloc(sizeof(Ciudad*) * (i+1));
//Copio de Bufer a la Lista <DANGER!>
rcvCiudades[i]=NULL;
for (j=0; j<i; j++){
auxCiudad= malloc(sizeof(Ciudad));
memcpy(auxCiudad , (buf+sizeof(int)) + (sizeof(Ciudad)*j),
sizeof(Ciudad));
rcvCiudades[j]=auxCiudad;
}
imprimirCiudad(rcvCiudades);
printf("///////////////////////////\n");
for (i=offset; buf[i]!='\\'; i++); //Busco el fin del paquete
printf("///////////////////////////3\n");
//printf("Fin de paquete:%d,\n", i);
i=(i-separador-1)/sizeof(TDP);
printf("malloqueo:%d, sizeof(TDP*):%d, i:%d\n",sizeof(TDP*) *
(i+1),sizeof(TDP*),i);
printf("///////////////////////////4\n");
rcvTDPs=malloc(sizeof(TDP*) * (i+1));
rcvTDPs[i]=NULL;

for (j=0; j<i; j++){
auxTDP= malloc(sizeof(TDP));
memcpy(auxTDP, (buf+separador+1) + (sizeof(TDP)*j), sizeof(TDP));
rcvTDPs[j]=auxTDP;
}
//imprimirTDP(rcvTDPs);
printf("///////////////////////////5\n");
rcvToken.listaCiudad=rcvCiudades;
rcvToken.listaTDP=rcvTDPs;
printf("Ya tengo el Token, (Porq soy un Grosso), toca un tecla para
verlo...\n");
getchar();
system("clear");
printf("\\");
printf("////////TOKEN RECIBIDO, Ident de Juego:%d////////////\n",
rcvToken.Ident);
printf("///////Lista TDP///////////\n");
imprimirTDP( rcvToken.listaTDP);
printf("///////Lista Ciudad///////\n");
imprimirCiudad(rcvToken.listaCiudad);
printf("//////////////////Fin del Token//////////////////\n");

}

return 0;
}

//------------------------FUNCIONES----------------------------------

Router** agregarRouter (Router** lista, unsigned char ip[4],int
puerto,int socket){
int i;
Router* aux;
i=0;
while (lista[i] != NULL) i++;
aux=(Router*) malloc (sizeof (Router));
memcpy(aux->ip,ip,4);
aux->socket=socket;
aux->puerto=puerto;
lista=(Router**) realloc(lista,sizeof(Router*) * (i+1+1));
lista[i]=aux;
lista[i+1]=NULL;
return lista;
}

Router** quitarRouter (Router** lista, int socket){
int i;
i=0;
for (i=0; (lista[i]!=NULL);i++)
if (lista[i]->socket==socket) {
printf("ENCONTRE esta mierda!!! en la pos %d",i);
break;
}
// || !(strcmp(equipo, lista[i]->equipo)); i++);
//printf("/////////////////////////////////////i vale:%d\n",i);
while(lista[i]!= NULL){
lista[i]=lista[i+1]; i++;
}

//printf("///////////////////////////////////////\n");
return lista;
}

void imprimirRouters(Router** lista){
int i;

for (i=0;lista[i]!=NULL; i++)
printf("Router en %d.%d.%d.%d, puerto %d, socket %d\n",
lista[i]->ip[0],lista[i]->ip[1],lista[i]->ip[2],lista[i]->ip[3],
lista[i]->puerto, lista[i]->socket);
}

Router* buscarRouter(
Router** lista, unsigned char ip[4],int puerto, int socket, int
criterio){
int i;
if (criterio == 1)
for (i=0; (lista[i]!=NULL);i++)
if (!strcmp(ip,lista[i]->ip)) break;
if (criterio == 2)
for (i=0; (lista[i]!=NULL);i++)
if (puerto==lista[i]->puerto) break;
if (criterio == 3)
for (i=0; (lista[i]!=NULL);i++)
if (socket==lista[i]->socket) break;
return lista[i];
}

//---------------------------------------
unsigned char* Ip2Short(char* s)
{ // printf("///////////%s///////\n", s);
char *tok,*Pip,*ip;
unsigned char *ret;
int i=0;
unsigned char shortip[4];
tok=(char*) malloc(4); ip = (char*) malloc (16);
Pip=(char*) malloc (16); ret=malloc(5);
strcpy(ip,s);
// printf("///////////%s///////\n", ip);
tok = strtok(ip,".");
ret[0]= (unsigned char) atoi(tok);
i++;
while (tok && (i<4)){
tok = strtok(NULL,".");
if (i<4){ ret[i]= (unsigned char) atoi(tok);
}
i++;
}
return ret;
}

char* IP2Dotted(unsigned char* s){
//for (i;i<4;i++) {
int i,pos,puntos;
char* aux ;
char* ret;

aux = malloc (3);
ret=malloc(16);
pos=0;puntos=0;
for (i=0;i<5; i++){
sprintf(aux,"%d",s[i]);
//printf("ret: %s\n",aux);
pos+=strlen(aux);
strcat(ret,aux); strcat (ret, ".");
}
for (i=0; i<16 && puntos<4;i++)
if (ret[i]=='.') puntos ++;
ret[i-1]='\0';
return ret;
}
Ciudad** agregarCiudad (Ciudad** lista,char ciudad[20], char ip[16],
int puerto, unsigned char orden)
{
int i;
Ciudad* aux;
i=0;
while (lista[i] != NULL) i++;
aux=(Ciudad*) malloc (sizeof (Ciudad));
aux->puerto=puerto;
//aux->socket=socket;
aux->orden=orden;
strcpy(aux->ip, ip);
strcpy(aux->ciudad,ciudad);
lista=(Ciudad**) realloc(lista,sizeof(Ciudad*) * (i+1+1));
lista[i]=aux;
lista[i+1]=NULL;
return lista;
}

Ciudad** quitarCiudad (Ciudad** lista, char ciudad[20]){
int i;
i=0;

for (i=0; (lista[i]!=NULL);i++)
if (!strcmp(ciudad,lista[i]->ciudad)) {
break;
}
while(lista[i]!= NULL){
lista[i]=lista[i+1]; i++;
}
return lista;
}

//---------------------------------------------
void imprimirCiudad(Ciudad** lista){
int i;
for (i=0;lista[i]!=NULL; i++)
printf("#:%d-Ciudad:%s\nIP:%s,Puerto:%d\n",
lista[i]->orden, lista[i]->ciudad, lista[i]->ip,lista[i]->puerto);
return;
}
//--------------------------------------------
//------------------------------------------
Ciudad* buscarCiudad(Ciudad** lista,
char ciudad[20], char ip[16],
int puerto, unsigned char orden, int criterio){
int i;
if (criterio == 1)
for (i=0; (lista[i]!=NULL);i++)
if (!strcmp(ciudad,lista[i]->ciudad)) break;
if (criterio == 2)
for (i=0; (lista[i]!=NULL);i++)
if (!strcmp(ip,lista[i]->ip)) break;
if (criterio == 3)
for (i=0; (lista[i]!=NULL);i++)
if (puerto==lista[i]->puerto) break;
/*if (criterio == 4)
for (i=0; (lista[i]!=NULL);i++)
if (socket==lista[i]->socket) break;
if (criterio == 4)
for (i=0; (lista[i]!=NULL);i++)
if (orden==lista[i]->orden) break;
*/
return lista[i];
}

TDP** agregarTDP (TDP** lista,char ciudad[20], char equipo[20], int
puntos, int pGanados,
int pPerdidos, int pEmpatados){
int i;
TDP* aux;
i=0;
while (lista[i] != NULL) i++;
aux=(TDP*) malloc (sizeof (TDP));
aux->puntos=puntos;
aux->pGanados=pGanados;
aux->pPerdidos=pPerdidos;
aux->pEmpatados=pEmpatados;
strcpy(aux->equipo, equipo);
strcpy(aux->ciudad,ciudad);
lista=(TDP**) realloc(lista,sizeof(TDP*) * (i+1+1));
lista[i]=aux;
lista[i+1]=NULL;
return lista;
}
TDP** quitarTDP (TDP** lista, char ciudad[20]){
int i;
i=0;

for (i=0; (lista[i]!=NULL);i++)
if (!strcmp(ciudad,lista[i]->ciudad)) {
break;
}
while(lista[i]!= NULL){
lista[i]=lista[i+1]; i++;
}
return lista;
}

void imprimirTDP(TDP** lista){
int i;
for (i=0;lista[i]!=NULL; i++)
printf("Equipo %s, de:%s,\nPuntos %d, PG:%d PE:%d PP:%d\n",
lista[i]->equipo,lista[i]->ciudad,lista[i]->puntos,
lista[i]->pGanados,lista[i]->pEmpatados,lista[i]->pPerdidos);
return;
}
//--------------------------------------------
//------------------------------------------
TDP* buscarTDP(TDP** lista,
char ciudad[20], char equipo[20],
int puntos, int pGanados, int pEmpatados, int pPerdidos,int criterio){
int i;
if (criterio == 1)
for (i=0; (lista[i]!=NULL);i++)
if (!strcmp(ciudad,lista[i]->ciudad)) break;
if (criterio == 2)
for (i=0; (lista[i]!=NULL);i++)
if (!strcmp(equipo,lista[i]->equipo)) break;
if (criterio == 3)
for (i=0; (lista[i]!=NULL);i++)
if (puntos==lista[i]->puntos) break;
if (criterio == 4)
for (i=0; (lista[i]!=NULL);i++)
if (pGanados==lista[i]->pGanados) break;
if (criterio == 5)
for (i=0; (lista[i]!=NULL);i++)
if (pEmpatados==lista[i]->pEmpatados) break;
if (criterio == 6)
for (i=0; (lista[i]!=NULL);i++)
if (pPerdidos==lista[i]->pPerdidos) break;

return lista[i];
}
static int escuchar_socket (int listen_port) {
struct sockaddr_in a;
int s;
int yes;
if ((s = socket (AF_INET, SOCK_STREAM, 0)) < 0) {
perror ("socket");
return -1;
}
yes = 1;
if (setsockopt
(s, SOL_SOCKET, SO_REUSEADDR,
(char *) &yes, sizeof (yes)) < 0) {
perror ("setsockopt");
close (s);
return -1;
}
memset (&a, 0, sizeof (a));
a.sin_port = htons (listen_port);
a.sin_family = AF_INET;
if (bind
(s, (struct sockaddr *) &a, sizeof (a)) < 0) {
// perror ("bind");
close (s);
return -1;
}
printf ("Aceptando Conexiones en el puerto:> %d\n", (int)
listen_port);
listen (s, 10);
return s;
}
//------------------------------------
int crearsocketyconectarse(int p,char* ip)
{
int create_socket,nbytes;
char buf[50];
struct sockaddr_in address;

if ((create_socket = socket(AF_INET,SOCK_STREAM,0)) > 0)
{
address.sin_family = AF_INET;
address.sin_port = htons(p);
inet_pton(AF_INET,ip,&address.sin_addr);

if (connect(create_socket,(struct sockaddr *)&address,sizeof(address))
== 0)
{
//nbytes=recv(create_socket,buf,50,0);
//buf[nbytes]='\0';
return create_socket;
}
}
return 0;
}

int sendall(int s, char *buf, int *len)
{
int total = 0; // how many bytes we've sent
int bytesleft = *len; // how many we have left to send
int n;

while(total < *len) {
n = send(s, buf+total, bytesleft, 0);
if (n == -1) { break; }
total += n;
bytesleft -= n;
}

*len = total; // return number actually sent here

return n==-1?-1:0; // return -1 on failure, 0 on succes
}
----------------------------------------------------------------------------------------
I tried to pay attention to mallocs and reallocs and memory matters
but....
This code Runs GREAT, it creates some lists, adds data, showes it,
creates a buffer with all the info in the list, sends it across a
"me-to-me" socket
i recieve it, perfectly, read it, put it back to same kind of struct,
and print out the result.
The correct Results.

Now, i took this code to a program which uses this code, i copied some
of the code into functions.
The thing is that i create the struct Perfectly buf there must be some
mistake when i take the struct into a buffer to be sent because after i
send the buffer through a Real socket connected to another PC -i
captured the packet with ethereal- and i see the data is Wrong like
malformed and, of course, becuse of that, the other program ready to
read and dissamble the packet explodes misarably.

so, if u can, give it a look, please.

Thank you in advance!

Apr 29 '06 #1
1 1993
In article <11**********************@g10g2000cwb.googlegroups .com>,
<if*****@gmail.com> wrote:
I have This Code. if (socketpair(AF_UNIX, SOCK_STREAM,0,s) == -1 ) exit(1);


sockets and networking are not part of standard C, so unless you can
provide portable standard C versions of all of the networking layer,
we cannot really assist you in this newsgroup.

I suggest you try comp.unix.programming .

I suggest that you reconfigure your newsreader to use plain text instead
of "quoted-printable". I had to edit the above line by hand to get rid
of the =3D=3D that showed up instead of ==

I also suggest that you post a -link- to your code instead of the code itself.

--
Programming is what happens while you're busy making other plans.
Apr 29 '06 #2

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

13
by: Bob Rivers | last post by:
Hi, I was doing a research looking for Java solutions that are able to do "ping". I found old messages (and not so old ones), telling that Java was not able to do that, because the API...
2
by: Ben | last post by:
Hello all, I've got a fairly specific problem, and I'm hoping that somebody will have had to do something similar in the past and can help me out. I'm trying to write a client for a socket...
2
by: George | last post by:
Hi all. I've developed a simple client/server program using sockets for sending some characters. Well, the problem is that everything works perfectly except the last send/recv pair. If I print...
3
by: roberto | last post by:
Hi,i'm trying to read udp packets sent by satellite. It's a porting of a delphi program i did some year ago but , as i'm learning c#, i'd like to do it. I have the ip address of the sat...
4
by: Brian Rice | last post by:
I have a socket application that is sending and receiving packets asynchronously. It works great except, when I receive packets that are larger than my receive buffer which then generate several...
0
by: Fraser Dickson | last post by:
I am building a web based system using ASP.NET and VB.NET which has to interact with a web service which uses XML WDDX packets. I have been given the XML Packet Specification by the Web Service...
6
by: Ryan | last post by:
Hi, I am confused with how NetworkStream works. My application needs to handle heavy requests sent through TCP socket connection. I use NetworkStream.Read method to get the stream...
6
by: White Spirit | last post by:
I can send data over a raw socket in C#. The part that is currently a problem is constructing the packet to be sent. To construct the packet, is it necessary to construct the packet 'by hand' and...
6
by: White Spirit | last post by:
I have the following code to send a packet to a remote socket and receive a response in return: System.Net.Sockets.Socket locSocket = new System.Net.Sockets.Socket (AddressFamily.InterNetwork,...
0
by: emmanuelkatto | last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud. Please let me know. Thanks! Emmanuel
0
BarryA
by: BarryA | last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
1
by: Sonnysonu | last post by:
This is the data of csv file 1 2 3 1 2 3 1 2 3 1 2 3 2 3 2 3 3 the lengths should be different i have to store the data by column-wise with in the specific length. suppose the i have to...
0
by: Hystou | last post by:
There are some requirements for setting up RAID: 1. The motherboard and BIOS support RAID configuration. 2. The motherboard has 2 or more available SATA protocol SSD/HDD slots (including MSATA, M.2...
0
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
0
Oralloy
by: Oralloy | last post by:
Hello folks, I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>". The problem is that using the GNU compilers,...
0
jinu1996
by: jinu1996 | last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
0
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
agi2029
by: agi2029 | last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing,...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.