corrections commentaires + memory leak
This commit is contained in:
parent
3dd3033273
commit
9e2a27cb20
@ -2,7 +2,8 @@
|
|||||||
#include <string.h> /* memset */
|
#include <string.h> /* memset */
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
int main() {
|
int main()
|
||||||
|
{
|
||||||
int ret;
|
int ret;
|
||||||
struct array_proc tab_proc;
|
struct array_proc tab_proc;
|
||||||
memset(&tab_proc, 0, sizeof(struct array_proc));
|
memset(&tab_proc, 0, sizeof(struct array_proc));
|
||||||
@ -27,5 +28,7 @@ int main() {
|
|||||||
}
|
}
|
||||||
array_proc_print(&tab_proc);
|
array_proc_print(&tab_proc);
|
||||||
|
|
||||||
|
array_proc_free (&tab_proc);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
@ -151,12 +151,22 @@ int app_write (struct service *srv, const struct msg *m)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*prendre en parametre un tableau de process.
|
/*
|
||||||
* trouver le processus/service actif et renvoyer CONNECTION/APPLICATION
|
* srv_select prend en parametre
|
||||||
* si un processus il va etre placer dans proc
|
* * un tableau de process qu'on écoute
|
||||||
* si un service il va etre placer dans service.
|
* * le service qui attend de nouvelles connexions
|
||||||
*/
|
* * un tableau de process qui souhaitent parler
|
||||||
int srv_select(struct array_proc *ap, struct service *srv, struct process **proc) {
|
*
|
||||||
|
* la fonction trouve le processus/service actif et renvoie
|
||||||
|
* un entier correspondant à quel descripteur de fichier il faut lire
|
||||||
|
* * celui du serveur = nouvelle connexion entrante (CONNECTION)
|
||||||
|
* * celui d'un ou plusieurs processus = ils nous parlent (APPLICATION)
|
||||||
|
* * les deux à la fois (CON_APP)
|
||||||
|
*/
|
||||||
|
|
||||||
|
int srv_select (struct array_proc *ap, struct service *srv
|
||||||
|
, struct process **proc)
|
||||||
|
{
|
||||||
int i, j;
|
int i, j;
|
||||||
/* master file descriptor list */
|
/* master file descriptor list */
|
||||||
fd_set master;
|
fd_set master;
|
||||||
@ -182,10 +192,9 @@ int srv_select(struct array_proc *ap, struct service *srv, struct process **proc
|
|||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
readf = master;
|
readf = master;
|
||||||
if(select(fdmax+1, &readf, NULL, NULL, NULL) == -1)
|
if(select(fdmax+1, &readf, NULL, NULL, NULL) == -1) {
|
||||||
{
|
perror("select");
|
||||||
perror("Server-select() error lol!");
|
return -1;
|
||||||
exit(1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*run through the existing connections looking for data to be read*/
|
/*run through the existing connections looking for data to be read*/
|
||||||
@ -193,7 +202,7 @@ int srv_select(struct array_proc *ap, struct service *srv, struct process **proc
|
|||||||
if (FD_ISSET(i, &readf)) {
|
if (FD_ISSET(i, &readf)) {
|
||||||
if (i == listener) {
|
if (i == listener) {
|
||||||
return CONNECTION;
|
return CONNECTION;
|
||||||
}else {
|
} else {
|
||||||
for(j = 0; j < ap->size; j++) {
|
for(j = 0; j < ap->size; j++) {
|
||||||
if(i == ap->tab_proc[j]->proc_fd ) {
|
if(i == ap->tab_proc[j]->proc_fd ) {
|
||||||
*proc = ap->tab_proc[j];
|
*proc = ap->tab_proc[j];
|
||||||
@ -207,9 +216,12 @@ int srv_select(struct array_proc *ap, struct service *srv, struct process **proc
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*calculer le max filedescriptor*/
|
/*calculer le max filedescriptor*/
|
||||||
int getMaxFd(struct array_proc *ap) {
|
int getMaxFd(struct array_proc *ap)
|
||||||
|
{
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
int max = 0;
|
int max = 0;
|
||||||
|
|
||||||
for (i = 0; i < ap->size; i++ ) {
|
for (i = 0; i < ap->size; i++ ) {
|
||||||
if (ap->tab_proc[i]->proc_fd > max) {
|
if (ap->tab_proc[i]->proc_fd > max) {
|
||||||
max = ap->tab_proc[i]->proc_fd;
|
max = ap->tab_proc[i]->proc_fd;
|
||||||
|
@ -86,9 +86,6 @@ int msg_read (int fd, struct msg *m)
|
|||||||
}
|
}
|
||||||
free (buf);
|
free (buf);
|
||||||
|
|
||||||
// printf ("msg received: ");
|
|
||||||
// print_msg (m);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -96,14 +93,10 @@ int msg_write (int fd, const struct msg *m)
|
|||||||
{
|
{
|
||||||
assert (m != NULL);
|
assert (m != NULL);
|
||||||
|
|
||||||
// printf ("msg to write: ");
|
|
||||||
// print_msg (m);
|
|
||||||
|
|
||||||
char *buf = NULL;
|
char *buf = NULL;
|
||||||
size_t msize = 0;
|
size_t msize = 0;
|
||||||
msg_format_write (m, &buf, &msize);
|
msg_format_write (m, &buf, &msize);
|
||||||
|
|
||||||
// printf ("msg to send, real size %ld\n", msize);
|
|
||||||
int ret = usock_send (fd, buf, msize);
|
int ret = usock_send (fd, buf, msize);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
handle_err ("msg_write", "usock_send");
|
handle_err ("msg_write", "usock_send");
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
struct msg {
|
struct msg {
|
||||||
char type;
|
char type;
|
||||||
short valsize;
|
unsigned short valsize;
|
||||||
char *val;
|
char *val;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -33,11 +33,14 @@ void srv_process_gen (struct process *p
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int add_proc(struct array_proc *aproc, struct process *p) {
|
int add_proc (struct array_proc *aproc, struct process *p)
|
||||||
|
{
|
||||||
assert(aproc != NULL);
|
assert(aproc != NULL);
|
||||||
assert(p != NULL);
|
assert(p != NULL);
|
||||||
aproc->size++;
|
aproc->size++;
|
||||||
aproc->tab_proc = realloc(aproc->tab_proc, sizeof(struct process) * aproc->size);
|
aproc->tab_proc = realloc(aproc->tab_proc
|
||||||
|
, sizeof(struct process) * aproc->size);
|
||||||
|
|
||||||
if (aproc->tab_proc == NULL) {
|
if (aproc->tab_proc == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -46,16 +49,20 @@ int add_proc(struct array_proc *aproc, struct process *p) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int del_proc(struct array_proc *aproc, struct process *p) {
|
int del_proc (struct array_proc *aproc, struct process *p)
|
||||||
|
{
|
||||||
assert(aproc != NULL);
|
assert(aproc != NULL);
|
||||||
assert(p != NULL);
|
assert(p != NULL);
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < aproc->size; i++) {
|
for (i = 0; i < aproc->size; i++) {
|
||||||
if (aproc->tab_proc[i] == p) {
|
if (aproc->tab_proc[i] == p) {
|
||||||
|
|
||||||
aproc->tab_proc[i] = aproc->tab_proc[aproc->size-1];
|
aproc->tab_proc[i] = aproc->tab_proc[aproc->size-1];
|
||||||
aproc->size--;
|
aproc->size--;
|
||||||
aproc->tab_proc = realloc(aproc->tab_proc, sizeof(struct process) * aproc->size);
|
aproc->tab_proc = realloc(aproc->tab_proc
|
||||||
|
, sizeof(struct process) * aproc->size);
|
||||||
|
|
||||||
if (aproc->tab_proc == NULL) {
|
if (aproc->tab_proc == NULL) {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@ -69,10 +76,12 @@ int del_proc(struct array_proc *aproc, struct process *p) {
|
|||||||
void process_print (struct process *p)
|
void process_print (struct process *p)
|
||||||
{
|
{
|
||||||
if (p != NULL)
|
if (p != NULL)
|
||||||
printf ("process %d : index %d, version %d\n", p->proc_fd, p->index, p->version);
|
printf ("process %d : index %d, version %d\n"
|
||||||
|
, p->proc_fd, p->index, p->version);
|
||||||
}
|
}
|
||||||
|
|
||||||
void array_proc_print( struct array_proc *ap) {
|
void array_proc_print (struct array_proc *ap)
|
||||||
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < ap->size; i++) {
|
for (i = 0; i < ap->size; i++) {
|
||||||
printf("%d : ", i);
|
printf("%d : ", i);
|
||||||
@ -80,4 +89,8 @@ void array_proc_print( struct array_proc *ap) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void array_proc_free (struct array_proc *ap)
|
||||||
|
{
|
||||||
|
if (ap->tab_proc != NULL)
|
||||||
|
free (ap->tab_proc), ap->tab_proc = NULL;
|
||||||
|
}
|
||||||
|
@ -18,7 +18,8 @@ int add_proc(struct array_proc *, struct process *);
|
|||||||
|
|
||||||
int del_proc(struct array_proc *, struct process *);
|
int del_proc(struct array_proc *, struct process *);
|
||||||
|
|
||||||
void array_proc_print(struct array_proc *);
|
void array_proc_print (struct array_proc *);
|
||||||
|
void array_proc_free (struct array_proc *);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user